добавить слушателя действия в статический контекст - PullRequest
0 голосов
/ 26 августа 2018
 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());

В последней строке я получаю сообщение об ошибке: «controlball.this нельзя ссылаться из статического контекста»

, когда я пытаюсь использовать следующую технику вместо вызова метода stop (), который я простоизмените значения, которые мне нужно изменить:

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

я получаю ошибку, на нестатическое поле 'x' нельзя ссылаться из статического контекста ...

вопрос в том, что изОсновной метод Как я могу изменить значения х и у, которые объявлены в другом методе?

1 Ответ

0 голосов
/ 27 августа 2018

Существуют разные способы решения этой проблемы.Хорошим предложением является создание пользовательского 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)); 

Это должно помочь вам организовать ваш код и сохранить егочистый и ремонтопригодный.

...