Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 行动听众原则_Java_Swing_Compiler Errors_Actionlistener - Fatal编程技术网

Java 行动听众原则

Java 行动听众原则,java,swing,compiler-errors,actionlistener,Java,Swing,Compiler Errors,Actionlistener,我试图找到将动作添加到JButton或其他组件的基本原则。这就是我正在做的和我得到的 我创建了一个名为:Ali的类,其中包含一个main方法,在main方法中实例化另一个名为:MainFrame的方法,以及我在这里放入的任何组件 我在这里创建了一个简单的按钮,用ActionListener界面注册了它,并为此编写了actionPerformed()方法。非常简单。但是,不知怎的,这个程序给了我一个错误。 下面是简化的代码和错误 import javax.swing.JFrame; import

我试图找到将动作添加到
JButton
或其他组件的基本原则。这就是我正在做的和我得到的

我创建了一个名为:Ali的类,其中包含一个main方法,在main方法中实例化另一个名为:
MainFrame
的方法,以及我在这里放入的任何组件

我在这里创建了一个简单的按钮,用
ActionListener
界面注册了它,并为此编写了
actionPerformed()
方法。非常简单。但是,不知怎的,这个程序给了我一个错误。 下面是简化的代码和错误

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Ali{

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                JFrame frame = new MainFrameAli2("MainFrameAli2");
                frame.setSize(400,600);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.setVisible(true);
            }
        });
    }
}
下面是
MainFrameAli2

public class MainFrameAli2 extends JFrame implements ActionListener {

    public MainFrameAli2(String title){
        super(title);

        // set layout manager
        setLayout(new BorderLayout());

        // create swing component
        JTextArea textArea = new JTextArea();
        JButton button = new JButton("click");

        // add swing components to content pane
        Container c  = getContentPane();
        c.add(textArea, BorderLayout.NORTH);
        c.add(button, BorderLayout.SOUTH);

        // add behavior
        button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0) {
                System.out.println("Clicked");
            }
            });
    }
}
现在问题是代码没有运行,下面是错误:

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problems: 
    The public type MainFrameAli2 must be defined in its own file
    The type MainFrameAli2 must implement the inherited abstract method ActionListener.actionPerformed(ActionEvent)
如果我像下面这样写代码,一切都正常

        // add behavior
    button.addActionListener(this);
}

public void actionPerformed(ActionEvent e)  {
    System.out.println("hooyt");
}
}
为什么它在第一种情况下不起作用,而在第二种情况下起作用

那么,为什么它在第一种情况下不起作用,在第二种情况下不起作用呢

正如编译器消息所说,在第一个示例中,您没有在MainFrameAli2类中实现ActionListener接口

您创建了一个实现ActionListener接口的匿名内部类。这与让类实现接口不同

在第二个示例中,您的类确实实现了ActionListener

如果第一个示例是您可以完成的:

//public class MainFrameAli2 extends JFrame implements ActionListener {
public class MainFrameAli2 extends JFrame {

为了更快地获得更好的帮助,请发布一个(最小完整的可验证示例)或(简短、自包含、正确的示例)。1)
未解决的编译问题
在代码编译干净之前不要尝试运行代码!2) 在源代码中只需要一行空白就可以了。
{
之后或
}
之前的空行通常也是多余的。如果它有助于解决问题,请确认。顺便说一下,您说过“您创建了一个实现ActionListener接口的匿名内部类”。“内部类”是指(新的ActionListener())?你说的是界面吗?ActionListener不是一个接口吗?Thanks@user1971804,
您的意思是..
-是的,以及
{…}之间的代码)`你真的是指界面吗?`-不,我指的是类。在本例中,您创建了一个实现ActionListener接口的注释性内部类,但也可以使用内部类来扩展任何其他类,只需重写该类的方法即可。