Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何引用actionlistener中的按钮?_Java_Reference_Jframe_Actionlistener - Fatal编程技术网

Java 如何引用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

我刚开始适应听众,但我对和他们一起工作还是有点陌生。我需要引用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();
                }
            }
        });
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谢谢你,我没有完全使用此代码,但我需要了解源代码是如何实际调用的,然后转换为可引用的按钮。谢谢,我没有完全使用此代码,但我需要了解源代码是如何实际调用的,然后转换为可引用的按钮。