繁体   English   中英

无法访问外部类修饰符(java)

[英]can`t access outer class modifiers (java)

public class MainFrame extends JFrame {
    MainFrame()
    {
        JButton zeroButton = new JButton("0");
        add(zeroButton);

        Handler handler = new Handler();
        zeroButton.addActionListener(handler);
    }

    private class Handler implements ActionListener
    {

        public void actionPerformed(ActionEvent e) {
              if (e.getSource() == **zeroButton**)
                  JOptionPane.showMessageDialog(null, "hello there!");
        }
    }
}

该代码有一个错误,强调了我在代码中标记为粗体的内容。 这是错误消息:“找不到符号”

我以为我可以从内部类访问外部类修饰符,但这是行不通的!

zeroButton不是外部类( MainFrame )的成员,它是MainFrame构造函数中的局部变量。

试试这个

public class MainFrame extends JFrame {
    private final JButton zeroButton;

    MainFrame() {
        zeroButton = new JButton("0");

PS我也不确定您是否应该将控件与==进行比较。 (从未使用过的秋千)

您无法访问它,因为该按钮是另一种方法中的局部变量。

您有两个选择:1.在实例变量(类级别变量)中创建按钮。 请参阅Nikita的答案。

  1. 在构造函数中将处理程序作为匿名实现:

     MainFrame() { final JButton zeroButton = new JButton("0"); add(zeroButton); Handler handler = new Handler(); zeroButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (e.getSource() == **zeroButton**) JOptionPane.showMessageDialog(null, "hello there!"); } }); } 

在这种情况下,变量应该是最终变量,因为内部类只能访问最终局部变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM