我刚刚开始习惯听众,但我仍然不熟悉与他们合作。我需要在actionlistener中引用一个按钮来获取该按钮的文本。 我想要的代码是:
for(int i = 0; i<48; ++i){
button[i] = new JButton("");
contentPane.add(button[i]);
button[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
x_marks_the_spot();
if(button[i].getText().equals("X")){
increase_hit();
}
else{
increase_miss();
}
}
});
显然我不能这样做,因为[i]实际上并不存在于代码的不存在部分。我确信通过获取源代码可以做到这一点,但我无法想到它。
答案 0 :(得分:2)
通过获取源
来做到这一点
我相信你想要的是ActionEvent.getSource()
答案 1 :(得分:1)
显然我无法做到这一点,因为
[i]
实际上并不存在于代码的不存在部分。
您可以将i
复制到final
变量中来实现:
// Make a final copy of loop variable before making the listener
final tmpI = i;
...
// Use your final variable instead of `i` inside the listener
if(button[tmpI].getText().equals("X")){
但是,这不是最有效的方法,因为每个按钮都需要自己的侦听器对象,并且代码中存储了对tmpI
的引用。
您可以创建一个ActionListener
对象,并在所有按钮之间共享,如下所示:
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
x_marks_the_spot();
JButton sender = (JButton)e.getSource();
if(sender.getText().equals("X")){
increase_hit();
} else{
increase_miss();
}
}
};
for(int i = 0; i<48; ++i){
button[i] = new JButton("");
contentPane.add(button[i]);
button[i].addActionListener(listener);
}