0

有可能用唯一的 eventListener 识别 whst 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");
                    }
                }
            };

谢谢, !

4

2 回答 2

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()

于 2011-02-06T16:40:17.403 回答
1

您上面的代码非常需要重构。例如,您有一个 JButton 数组,为什么没有类似的 ImageIcon 数组,那么您可以摆脱所有这些 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()); 

或对此的一些变体。

于 2011-02-06T16:57:16.587 回答