我有一个代码:这是一个带有红色,蓝色值的矩阵,我需要一个项目。我需要点击一些按钮,然后点击邻居,他们的值应该交换(红色有键1,蓝键2),依此类推。我想我应该以某种方式通过线程创建它(抱歉不准确),但据我所知,应该点击一个按钮(新线程启动),第二个按钮(线程停止,交换制作)和值更改。
我理解,我的问题可能是一些"教程"或者基本但这对我来说很复杂,我很长一段时间都找不到答案。谢谢你的任何建议或例子。
public class ButtonsMatrix extends JButton {
private int[][] fModel;
private int fX;
private int fY;
public ButtonsMatrix( int x, int y, int[][] model) {
fX= x;
fY= y;
fModel= model;
/*addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Update();
}
});*/
updateNameFromModel();
}
private void updateNameFromModel() {
fModel[fX][fY] = (int)(Math.random()*2);
setText(String.valueOf(fModel[fX][fY]));
if(fModel[fX][fY] == 1){
setText("Red");
} else {
setText("Blue");
}
}
public static void main(String[] args) {
int dim=7;
int matrix[][] = new int[7][7];
JFrame f = new JFrame("Window containing a matrix");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel();
JPanel extra = new JPanel(new CardLayout(290,300));
TextField tf = new TextField();
tf.setBounds(800,20,20,20);
f.add(tf);
p.setLayout(new GridLayout(dim, dim));
for( int r = 0; r < dim; r++){
for( int c = 0; c < dim; c++){
ButtonsMatrix button= new ButtonsMatrix(r, c, matrix);
p.add(button);
}
}
extra.add(p);
f.setLocation(350, 100);
f.add(extra);
f.pack();
f.setVisible(true);
}
}
答案 0 :(得分:1)
每个按钮都不需要知道任何其他按钮。 只需创建按钮矩阵并为每个按钮添加一个ActionListener。在第一次单击时,只需保存该按钮引用。在下一次单击时,交换两个按钮的信息并将保存的ID设置为null。概要:
public class MyClass {
private JButton clicked = null;
public void main( String[] args ) {
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton b = (JButton)e.getSource();
if ( clicked == null ) {
clicked = b;
} else {
if ( b != clicked) {
// swap info between b and clicked
}
clicked = null;
}
}
};
// create matrix here, adding the above listener to each button.
...
}
}