创建可点击的JButton矩阵

时间:2013-06-17 08:31:14

标签: java swing jbutton

我想要完成的是:

*包含按钮矩阵的窗口。比方说10x10。

*按钮应该显示“1”或“0”,并在我点击它们时更改。

*按钮(1或0)的值应存储在String[][]矩阵中。

目前我有一个包含值的String[][]二维数组。我可以使用以下代码在带有可点击按钮的窗口中显示它:

//dim = 10
//matrix is the 10x10 String[][] matrix containing 1s or 0s

private static void convertMatrixToGUI() {
    JFrame f = new JFrame("Window containing a matrix");
    JPanel p = new JPanel();
    p.setLayout(new GridLayout(dim, dim));

    for(int r = 0; r < dim; r++){
        for(int c = 0; c < dim; c++){
            p.add(new JButton(matrix[r][c]));
        }
    }
    f.add(p);
    f.pack();
    f.setVisible(true);
}

下一步是在单击按钮时更改矩阵中的值。如果我单击0,则应将其更改为1,反之亦然。这些值必须始终存储在String[][]中。

如何通过单击图形矩阵中的按钮来更改字符串矩阵中的内容?如果我点击[5][2]位置的按钮,该程序应该如何知道我想将字符串矩阵更改为位置[5][2]

最好的问候Goatcat

5 个答案:

答案 0 :(得分:4)

GridButtonPanel说明了基本原则。替换JToggleButton以获得二进制选择/未选择状态的效果。

image

答案 1 :(得分:2)

你需要的是一个ActionListener。

本教程为您提供了如何使用它的建议。

http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html

答案 2 :(得分:2)

我举一个名为JButton的{​​{1}}扩展示例,其中包含矩阵位置和矩阵。此外,它会创建一个ChangingButton,用于更改点击时的名称。

ActionListener

这是您的主要测试课程。

public static class ChangingButton extends JButton {

    private final int[][] fModel;
    private final int fX;
    private final int fY;

    public ChangingButton(final int x, final int y, final int[][] model) {
        fX= x;
        fY= y;
        fModel= model;

        addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                fModel[fX][fY] = fModel[fX][fY] == 1 ? 0 : 1;
                updateNameFromModel();
            }
        });
        updateNameFromModel();
    }

    private void updateNameFromModel() {
        setText(String.valueOf(fModel[fX][fY]));
    }

}

希望它有所帮助。如果您不明白,请询问。

答案 3 :(得分:2)

试试吧

        int DIM = 10;
    String [][]matrix = new String[DIM][DIM];
    JButton [][]butt = new JButton[DIM][DIM];

    JFrame f = new JFrame("Window containing a matrix");
    JPanel p = new JPanel();

    for(int r=0; r<DIM; r++){
        for(int c=0; c<DIM; c++){
            butt[r][c] = new JButton(matrix[r][c]);
            p.add(butt[r][c]);
            butt[r][c].addActionListener(this); //if your class extends ActionListener
        }
    }

    f.add(p);
    f.pack();
    f.setVisible(true);

并覆盖actionPerformed方法。 实现你的代码:)

@Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub

    }

答案 4 :(得分:1)

 for(int r = 0; r < dim; r++) {
       for(int c = 0; c < dim; c++){
           JButton temp = new JButton(matrix[r][c])
           temp.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                matrix[r][c] = (matrix[r][c].equals("0")) ? "1" : "0"; //or for changing text of the button this.setText("1") or "0"
              }
           })
          p.add(temp);
       }
   }