我想要完成的是:
*包含按钮矩阵的窗口。比方说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
答案 0 :(得分:4)
GridButtonPanel
说明了基本原则。替换JToggleButton
以获得二进制选择/未选择状态的效果。
答案 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);
}
}