Java交换事件线程

时间:2018-05-26 18:48:51

标签: java

我有一个代码:这是一个带有红色,蓝色值的矩阵,我需要一个项目。我需要点击一些按钮,然后点击邻居,他们的值应该交换(红色有键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);
    }

}

1 个答案:

答案 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.
      ...

   }
}