一个JButton的ActionListener内访问变量(Accessing Variable w

2019-09-29 15:05发布

这似乎是一个很简单的问题,但我有很多的麻烦搞清楚如何对付它。

示例方案:

    final int number = 0;

    JFrame frame = new JFrame();
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    frame.setSize(400, 400); 

    final JTextArea text = new JTextArea();
    frame.add(text, BorderLayout.NORTH);

    JButton button = new JButton(number + ""); 
    button.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
        number++; // Error is on this line
        text.setText(number + "");
    }});
    frame.add(button, BorderLayout.SOUTH);

我真的不知道哪里去了。

Answer 1:

如果你申报number为final,则不能修改它的值。 你必须删除final变质。

然后,您可以访问通过该变量:

public class Scenario {
    private int number;

    public Scenario() {
        JButton button = new JButton(number + "");
        button.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent arg0) { 
                Scenario.this.number++;
                text.setText(Scenario.this.number + "");
            }
        });
    }
}

符号“ClassName.this”允许您访问到你在一个类的对象。

请atention在当您使用“数字”第一次- new JButton(number) - ,你可以访问到数字直接,因为你是在场景范围。 但是,当你使用它你的ActionListener里面,你在你的ActionListener范围,而不是场景范围。 这就是为什么你不能看到变量“数量”直接Action监听的内部,你必须访问您身在何处,这可以通过Scenario.this完成方案的实例



Answer 2:

最快的解决办法是申报numberstatic ,并使用你的类的名称引用它。

或者你可以让一个类implements ActionListener ,并通过numbertext到它的构造函数。



文章来源: Accessing Variable within JButton ActionListener