1

当我编译它在第 33 行显示错误:找不到符号。我正在打电话 jbtNew.addActionListener(listener),为什么它无法在其中找到 jbtNew

(e.getSource() == jbtNew) in line 33.

从代码

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class AnonymousListenerDemo extends JFrame {

    public AnonymousListenerDemo() {
        // Create four buttons
        JButton jbtNew = new JButton("New");
        JButton jbtOpen = new JButton("Open");
        JButton jbtSave = new JButton("Save");
        JButton jbtPrint = new JButton("Print");
        // Create a panel to hold buttons
        JPanel panel = new JPanel();
        panel.add(jbtNew);
        panel.add(jbtOpen);
        panel.add(jbtSave);
        panel.add(jbtPrint);

        add(panel);
        // Create and register anonymous inner-class listener
        AnonymousListenerDemo.ButtonListener listener = new AnonymousListenerDemo.ButtonListener();
        jbtNew.addActionListener(listener);


    }

    class ButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == jbtNew) //Here it show the problem
            {
                System.out.println("Process New");
            }
        }
    }

    /** Main method */
    public static void main(String[] args) {
        JFrame frame = new AnonymousListenerDemo();
        frame.setTitle("AnonymousListenerDemo");
        frame.setLocationRelativeTo(null); // Center the frame
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}
4

2 回答 2

3

那是一个局部变量。
它不存在于构造函数之外。

您需要在课堂上创建一个字段。

于 2012-07-08T14:38:34.810 回答
1

这可能可行(以您在此处发布的形式)并且@SLaks 提到了+1,并进行了一些重大更改

在所有方法将被放置到单独的类中以使用 put/getClientProperty() 的情况下

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class AnonymousListenerDemo {

    private static final long serialVersionUID = 1L;
    private JFrame frame = new JFrame("AnonymousListenerDemo");
    // Create four buttons
    private JButton jbtNew = new JButton("New");
    private JButton jbtOpen = new JButton("Open");
    private JButton jbtSave = new JButton("Save");
    private JButton jbtPrint = new JButton("Print");

    public AnonymousListenerDemo() {
        JPanel panel = new JPanel();// Create a panel to hold buttons
        panel.add(jbtNew);
        panel.add(jbtOpen);
        panel.add(jbtSave);
        panel.add(jbtPrint);
        // Create and register anonymous inner-class listener
        jbtNew.addActionListener(new ButtonListener());
        frame.add(panel);
        //frame.setTitle("AnonymousListenerDemo");
        frame.setLocationRelativeTo(null); // Center the frame
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    class ButtonListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == jbtNew) {
                System.out.println("Process New");
            }
        }
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            public void run() {
                new AnonymousListenerDemo();
            }
        });
    }
}
于 2012-07-08T14:43:45.517 回答