将动作侦听器添加到静态上下文

时间:2018-08-26 19:54:08

标签: java button listener action

 public static void main(String[] args) {
        ControlledBall ball2 = new ControlledBall(12,2);
        JFrame window = new JFrame("Controlled Ball");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        window.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        JButton stop = new JButton("Stop");
        stop.setSize(4,400);
        stop.setVisible(true);
        stop.setText("Stop");
        stop.addActionListener(new Action());

我在最后一行显示“受控球。无法从静态上下文中引用”的错误。

当我尝试以下技术而不是调用stop()方法时,我只是更改了需要更改的值:

stop.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                x= 0;
                y = 0;
           }
        });

我从静态上下文中无法引用错误非静态字段'x'...

问题是,从主要方法中,如何更改在另一种方法中声明的x和y的值?

1 个答案:

答案 0 :(得分:0)

有几种方法可以解决此问题。一个好的建议是可能创建一个自定义ActionListener,其中包含对要更改的对象的引用。例如,您可能有:

class StopListener implements ActionListener {

    private ControlledBall ball;

    public StopListener(ControlledBall ball) {
        this.ball = ball;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        ball.stop(); // sets x and y to zero
    }
}

然后,您可以实例化该类并将其用作ActionListener

stop.addActionListener(new MyListener(ball2)); 

这应该有助于您组织代码并保持其清洁和可维护。