我想开发一个非常基本的应用程序,这里是代码,我有4个类,一个是主类,第二个是JMenuBar
,第三个是Panel
,第四个一个是Action Listener。目前我的问题是在这里如何为JMenuBar
类添加Action Listener的实例,直到我可以做一些动作。
public class My_Action implements ActionListener {
public My_Action() {
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
}
}
public class My_Menu extends JMenuBar {
private My_Action my_action = new My_Action();
JMenu file;
JMenu Edit;
JMenu help;
public My_Menu() {
file = new JMenu("File");
Edit = new JMenu("Edit");
help = new JMenu("help");
JMenuItem item1 = new JMenuItem("file");
JMenuItem item2 = new JMenuItem("New");
JMenuItem item3 = new JMenuItem("Setting");
JMenuItem item4 = new JMenuItem("Color");
JMenuItem item5 = new JMenuItem("Print");
JMenuItem item6 = new JMenuItem("Exit");
file.add(item1);
file.add(item2);
file.add(item3);
file.add(item4);
file.add(item5);
file.add(item6);
file.addSeparator();
this.add(file);
this.add(Edit);
this.add(help);
item1.addActionListener(my_action);
}
public void actionPerformed(ActionEvent actionEvent){
System.exit(0);
}
}
答案 0 :(得分:0)
这是我的测试程序。
执行菜单程序时检查控制台输出。
package just.test;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class My_Menu extends JMenuBar implements ActionListener {
private static final long serialVersionUID = 1L;
private My_Action my_action = new My_Action();
JMenu file;
JMenu Edit;
JMenu help;
public My_Menu() {
file = new JMenu("File");
Edit = new JMenu("Edit");
help = new JMenu("help");
this.add(file);
this.add(Edit);
this.add(help);
JMenuItem item1 = new JMenuItem("file");
item1.setActionCommand("file");
JMenuItem item2 = new JMenuItem("New");
item2.setActionCommand("New");
JMenuItem item3 = new JMenuItem("Setting");
item3.setActionCommand("Setting");
JMenuItem item4 = new JMenuItem("Color");
item4.setActionCommand("Color");
JMenuItem item5 = new JMenuItem("Print");
item5.setActionCommand("Print");
JMenuItem item6 = new JMenuItem("Exit");
item6.setActionCommand("Exit");
JMenuItem item7 = new JMenuItem("edit1");
item7.setActionCommand("edit1");
JMenuItem item8 = new JMenuItem("edit2");
item8.setActionCommand("edit2");
JMenuItem item9 = new JMenuItem("about..");
item9.setActionCommand("about");
file.add(item1);
file.add(item2);
file.addSeparator();
file.add(item3);
file.add(item4);
file.add(item5);
file.add(item6);
Edit.add(item7);
Edit.add(item8);
help.add(item9);
item1.addActionListener(my_action);
item2.addActionListener(my_action);
item3.addActionListener(my_action);
item4.addActionListener(my_action);
item5.addActionListener(my_action);
item7.addActionListener(this);
item8.addActionListener(this);
item9.addActionListener(this);
file.addActionListener(this);
Edit.addActionListener(this);
help.addActionListener(my_action);
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
String command = actionEvent.getActionCommand();
System.out.println("----1----\n" + command);
//System.exit(0);
}
class My_Action implements ActionListener {
public My_Action() {
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
String command = actionEvent.getActionCommand();
System.out.println("----2----\n" + command);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame();
JPanel jp = new JPanel();
jp.setLayout(new BorderLayout());
f.add(new My_Menu(), BorderLayout.NORTH);
f.add(jp, BorderLayout.CENTER);
jp.setSize(500,400);
f.setSize(800, 600);
f.setVisible(true);
//f.pack();
}
});
}
}
您只需将addActionListener添加到必须发送消息的组件中。
item1.addActionListener(my_action);
或
item7.addActionListener(this);
不要忘记在My_Menu类上实现ActionListener。
答案 1 :(得分:-1)
你拥有的是对的。 它应该调用单击文件菜单项时执行的操作。只需在该方法中放置一个打印ln就可以看到它被调用。