按下什么按钮java

时间:2011-02-06 16:37:55

标签: java swing events button actionlistener

可以通过唯一的eventListener来识别btn被按下吗?

我尝试了这段代码,但没有用

 ActionListener one = new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if (gr1.getCounter1() < 5) {
                        gr1.setCounter1(gr1.getCounter1() + 1);
                        if (arraybtn[1].isSelected())
                            test1.setIcon(play1a);
                        if (arraybtn[2].isSelected())
                            test1.setIcon(play1b);
                        if (arraybtn[3].isSelected())
                            test1.setIcon(play1c);
                        if (arraybtn[4].isSelected())
                            test1.setIcon(play1d);
                        if (arraybtn[5].isSelected())
                            test1.setIcon(play1e);
                    } else {
                        pn5.setText("No more cards");
                    }
                }
            };

谢谢!

2 个答案:

答案 0 :(得分:5)

使用getSource对象中的ActionEvent方法。

您的代码如下:

if (e.getSource() == arraybtn[1])
   test1.setIcon(play1a);
if (e.getSource() == arraybtn[2])
   test1.setIcon(play1b);
if (e.getSource() == arraybtn[3])
   test1.setIcon(play1c);
if (e.getSource() == arraybtn[4])
   test1.setIcon(play1d);
if (e.getSource() == arraybtn[5])
   test1.setIcon(play1e);

获取事件的来源(即按下的按钮)。

http://download.oracle.com/javase/1.4.2/docs/api/java/util/EventObject.html#getSource()

答案 1 :(得分:1)

上面的代码非常需要重构。例如,你有一个JButton数组,为什么不是一个类似的ImageIcons数组,那么你可以摆脱所有那些if块。

例如:

  ActionListener one = new ActionListener() {
     public void actionPerformed(ActionEvent e) {
        if (gr1.getCounter1() < 5) {
           gr1.setCounter1(gr1.getCounter1() + 1);
           for (int i = 0; i < arraybtn.length; i++) {
              if (arraybtn[i] == e.getSource()) {
                 test1.setIcon(play1Icons[i]);
              }
           }
        } else {
           pn5.setText("No more cards");
        }
     }
  };

不要忘记我在你的其他主题中关于进一步重构的建议,包括创建一个Player类,一个Card类,一个Deck类,一个GameManager等等。

关于你的问题,“在这个脚本中我有play1a = hand.get(1).getImage();如果我用另一个数组如test1.setIcon(play1Icons [i]);,我如何定义变量?“

手是一个ArrayList吗?解决问题的一种方法是做一些像

这样的事情
test1.setIcon(hand.get(i).getImage()); 

或其中的一些变体。