我试图找到向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");
}
}为什么它在第一种情况下不起作用,而在第二种情况下起作用?
发布于 2015-03-08 16:05:17
那么,为什么它不工作在第一种情况下,在第二种情况下工作。
正如编译器消息所述,在第一个示例中,您没有在您的ActionListener类中实现MainFrameAli2接口。
您创建了一个实现ActionListener接口的匿名内部类。这与类实现接口不是一回事。
在第二个示例中,类确实实现了ActionListener。
如果您可以完成第一个示例:
//public class MainFrameAli2 extends JFrame implements ActionListener {
public class MainFrameAli2 extends JFrame {https://stackoverflow.com/questions/28928564
复制相似问题