代码之家  ›  专栏  ›  技术社区  ›  klutt Anjali Shah

无法使用ActionListener访问此.draw()

  •  0
  • klutt Anjali Shah  · 技术社区  · 6 年前

    我试图使按钮刷新窗口,但收到以下错误消息:

    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 回复  |  直到 6 年前
        1
  •  1
  •   camickr    6 年前
    this.draw();
    

    引用ActionListner。

    你想要:

    Test.this.draw();
    

        2
  •  1
  •   chrylis -cautiouslyoptimistic-    6 年前

    创建显式匿名类时, this 引用的实例 ActionListener . 要绘制外部类,请使用 Test.this.draw() ,或者,更简单地说,用lambda替换整个侦听器(从技术上讲,它创建了一个匿名类,但并不接管它) ):

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