Java的:输入使用网格布局矩阵(Java: input a matrix using GridLa

2019-07-04 01:44发布

我想编写一个函数,可以输入使用网格布局的任何大小的矩阵,但我坚持,因为我无法找到提取的JTextField值,以填补“垫子”变种适当的方式(见下文FIXME) 。

    /**
     * @mat: matrix declared in main (e.g: mat[][] = new int[3][3];)
     * @rows: number of matrix rows (e.g: int rows = 3;)
     * @columns: number of matrix columns (e.g: int columns = 3;)
     */
    public static int[][] inputMatrix(int[][] mat, int rows, int columns)
    {
        JPanel panel = new JPanel();     
        panel.setLayout(new GridLayout(rows,columns));

        for (int a=0; a<(rows*columns); a++)
        {
            panel.add(new JTextField(a));
        }

        if (JOptionPane.showConfirmDialog(null, panel, "Enter the matrix", JOptionPane.OK_CANCEL_OPTION)
                                        == JOptionPane.OK_OPTION)
        {
            for(int a=0; a<(rows*columns); a++){
                for(int b=0; b<rows; b++){
                    for(int c=0; c<columns; c++){
                        /* FIXME: find how to extract JTextField values. */
                        mat[b][c] = JTextField.a.getText();
                    }
                }
            }
        }

        return mat;
    }

在此先感谢您的帮助!

Answer 1:

  • 使用JTable的 ,而不是一堆JTextField通过奠定GridLayout

要么

  • 添加有putClientProperty并添加标识符RowColumnGridLayout

  • JTextFieldHashMap

  • 我会更喜欢putClientProperty (你可以到多重数或额外的相关信息..,独立的数字putClientProperty不以某种方式降低)

  • 取决于(不清楚)德兴的,你可以添加ActionListenerJTextField (加速器ENTER key )或DocumentListener

虚拟例如,对于代码示例JButtonActionListenerputClientProperty是入店从所有方法或Listeners加入到JTextField

在循环

buttons[i][j].putClientProperty("column", i);
buttons[i][j].putClientProperty("row", j);
buttons[i][j].addActionListener(new MyActionListener());

从ActionListener的获得(例如)

public class MyActionListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        JButton btn = (JButton) e.getSource();
        System.out.println("clicked column " + btn.getClientProperty("column")
                + ", row " + btn.getClientProperty("row"));
}


Answer 2:

比方说,你有3行×3列网格。 由于网格布局按行补充道,然后第二行的第一个项目将是你加入到网格中的第4项。 你可以通过调用panel.getComponent(3)(零索引,以便第4项为索引3)获取该项目。

所以 - 你可以只使用getComponent,做一点数学基础上的列数和我找出正确的索引,J坐标矩阵。



文章来源: Java: input a matrix using GridLayout