Java:使用 GridLayout 输入矩阵

标签 java swing input matrix grid-layout

我正在尝试编写一个可以使用 GridLayout 输入任意大小的矩阵的函数,但是我被卡住了,因为我找不到合适的方法来提取 JTextField 值来填充“mat”var(请参阅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;
    }

预先感谢您的帮助!

最佳答案

  • 使用JTable而不是 GridLayout
  • 放置的一堆 JTextField

  • 在那里添加 putClientProperty 并添加 identifier Row a Column from GridLayout

  • JTextField放入HashMap

  • 我更喜欢 putClientProperty(您可以多人游戏号码或附加信息..,单独的 putClientProperty 的数量不会以某种方式减少)

  • 取决于(不清楚)设计,您可以将ActionListener 添加到JTextField(加速器是ENTER 键)或文档监听器

虚拟示例,JButtonActionListener 的代码示例,putClientProperty 可从所有方法或添加的 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"));
}

关于Java:使用 GridLayout 输入矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13531346/

相关文章:

javascript - 在 javascript 和 CSS 中为禁用的输入文本框设置工具提示

java - 具有三个实体的 Hibernate 约束

Java 中的 Java 命令行 XSLT 转换

java - 如何为我的整个框架或对话框使用字体样式?

java - Swing 中预定义的 JDialog

python - 用户输入数字列表并在 Python 函数中使用它

java - 用户输入Integer,用这个Int调用数组时总是返回0?

java - maven多模块项目中,如何打包单个子项目?

java - 如何限制 ItemtouchHelper 只能从左向右滑动

swing - NetBeans - JComboBox 警告 - 缺少泛型类 JComboBox<E> 的类型参数