可以通过唯一的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");
}
}
};
谢谢!
答案 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());
或其中的一些变体。