我想要完成的是:
*包含按钮矩阵的窗口。假设是10x10。
*按钮应显示"1“或"0",并在我单击它们时更改。
*按钮的值(1或0)应存储在String[][]矩阵中。
目前,我有一个包含值的String[][] 2D数组。我可以使用以下代码在带有可单击按钮的窗口中显示它:
//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]
最好的问候山羊猫
发布于 2013-06-17 16:49:04
我给您提供一个名为ChangingButton的JButton扩展的示例,该扩展具有分配给它的矩阵位置和矩阵。此外,它还创建了一个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]));
}
}这是您的主要测试类。
public static void main(String[] args) {
int dim=10;
int matrix[][] = new int[10][10];
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++){
ChangingButton button= new ChangingButton(r, c, matrix);
p.add(button);
}
}
f.add(p);
f.pack();
f.setVisible(true);
}希望能有所帮助。如果你有不明白的地方,请提出来。
发布于 2013-06-17 16:36:35
发布于 2013-06-17 16:39:03
您需要的是一个ActionListener。
本教程将向您介绍如何使用它。
http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html
https://stackoverflow.com/questions/17143338
复制相似问题