Java 如何引用actionlistener中的按钮?
我刚开始适应听众,但我对和他们一起工作还是有点陌生。我需要引用actionlistener中的一个按钮来获取该按钮的文本。 我想要的代码是:Java 如何引用actionlistener中的按钮?,java,reference,jframe,actionlistener,Java,Reference,Jframe,Actionlistener,我刚开始适应听众,但我对和他们一起工作还是有点陌生。我需要引用actionlistener中的一个按钮来获取该按钮的文本。 我想要的代码是: for(int i = 0; i<48; ++i){ button[i] = new JButton(""); contentPane.add(button[i]); button[i].addActionListener(new ActionListener() { publi
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();
}
}
});
for(int i=0;i
通过获取源代码来实现这一点
我相信你想要的是
通过获取源代码来实现这一点
我相信你想要的是
显然我不能这样做,因为[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);
}
ActionListener=newactionListener(){
已执行的公共无效操作(操作事件e){
x_标记_点();
JButton sender=(JButton)e.getSource();
if(sender.getText().equals(“X”)){
增加_hit();
}否则{
增加_miss();
}
}
};
对于(int i=0;i
显然我不能这样做,因为[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);
}
ActionListener=newactionListener(){
已执行的公共无效操作(操作事件e){
x_标记_点();
JButton sender=(JButton)e.getSource();
if(sender.getText().equals(“X”)){
增加_hit();
}否则{
增加_miss();
}
}
};
对于(int i=0;i谢谢你,我没有完全使用此代码,但我需要了解源代码是如何实际调用的,然后转换为可引用的按钮。谢谢,我没有完全使用此代码,但我需要了解源代码是如何实际调用的,然后转换为可引用的按钮。