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接口的注释性内部类,但也可以使用内部类来扩展任何其他类,只需重写该类的方法即可。