执行一次actionListener并继续执行另一个actionListener

时间:2014-07-27 07:42:10

标签: java swing jbutton actionlistener

任何人对这个问题有另一种观点吗?

我需要帮助这部分代码,我想执行一个actionListener(向Jbutton添加白色边框)只有ONCE并继续执行另一个actionListener(将蓝色边框添加到另一个(不同的)Jbutton按下)。这是我的代码,它只是连续执行白色边框。 非常感谢您的反馈。

for(int c = 0; c< 10; c++) 
        {
            for (int r = 0; r< 10; r++)
            {
                bu1[c][r] = new JButton(); //Insert Into List
                panel.add(bu1[c][r]);

                final int i = c;
                final int j = r;

                bu1[i][j].addActionListener(new ActionListener()
                {

                @Override
                public void actionPerformed(ActionEvent e) 
                    {
                        if  (e.getSource() == bu1[i][j])
                        {
                            bu1[i][j].setBorder(BorderFactory.createLineBorder(Color.WHITE, 2));
                            bu1[i][j].removeActionListener(this);
                        }

                    }    

            });

                bu1[i][j].addActionListener(new ActionListener()
                {

                @Override
                public void actionPerformed(ActionEvent e) 
                    {
                        if  (e.getSource() == bu1[i][j])
                        {
                            bu1[i][j].setBorder(BorderFactory.createLineBorder(Color.BLUE, 2));
                        }

                    }    

            });

1 个答案:

答案 0 :(得分:2)

如果我理解您的问题,那么最简单的解决方案是在count中保留ActionListener。因为那时你只需要一个ActionListener,例如

private int count = 0;
@Override
public void actionPerformed(ActionEvent e) {
  JButton obj = bu1[i][j]; // <-- save the typing.
  if (e.getSource() == obj) {
    if (count == 0) { 
      obj.setBorder(BorderFactory.createLineBorder(
          Color.WHITE, 2)); // <-- set to white on 0.
    } else if (count == 1) {
      obj.setBorder(BorderFactory.createLineBorder(
          Color.BLUE, 2)); // <-- set to blue on 1.
    }
    count++;
  }
}