Не удается получить доступ к this.draw () с помощью ActionListener - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь заставить кнопку обновить окно, но получаю следующее сообщение об ошибке:

Test.java:21: error: cannot find symbol
                    this.draw();
                        ^
  symbol: method draw()
1 error

Это код:

import javax.swing.*;
import java.awt.event.*;

public class Test {
    JFrame frame;

    public void createMainWindow() {
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800,600);
        JButton refresh = new JButton("Refresh");
        refresh.setBounds(620, 20, 100, 30);
        refresh.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    this.draw();
                }
            }
            );
        frame.setLayout(null);
        frame.add(refresh);
        frame.setVisible(true);
        frame.setTitle("Title");
    }

    public void draw() {
        // Code                                                                                                                                                                                                    
        frame.setVisible(true);
    }
}

Я явно что-то не так понял по этому поводу.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018
this.draw();

Относится к списку действий.

Вы хотите:

Test.this.draw();

для ссылки на метод в классе Test.

0 голосов
/ 12 ноября 2018

Когда вы создали явный анонимный класс, this ссылается на экземпляр ActionListener. Чтобы нарисовать внешний класс, используйте Test.this.draw() или, проще, замените весь слушатель на лямбду (который технически создает анонимный класс, но не принимает this):

refresh.addActionListener(e -> this.draw());
...