Java 如何将JMenuItem链接到JButton
假设我有一个JMenuItem,里面有一个文本“Exit”,还有一个JButton,里面有一个文本“Exit”,Java 如何将JMenuItem链接到JButton,java,swing,jbutton,exit,jmenuitem,Java,Swing,Jbutton,Exit,Jmenuitem,假设我有一个JMenuItem,里面有一个文本“Exit”,还有一个JButton,里面有一个文本“Exit”, JButton将使用的命令是System.exit(0),当然是使用Action Listener,好的,我知道,我可以在单击JMenuItem时输入相同的代码,但是没有一种方法,当我单击JMenuItem时,JButton被单击,然后执行以下命令(JButton命令) 一个好方法是为两个组件设置相同的ActionListener。像这样: JButton button = new
JButton将使用的命令是System.exit(0),当然是使用Action Listener,好的,我知道,我可以在单击JMenuItem时输入相同的代码,但是没有一种方法,当我单击JMenuItem时,JButton被单击,然后执行以下命令(JButton命令) 一个好方法是为两个组件设置相同的
ActionListener
。像这样:
JButton button = new JButton ("Exit");
JMenuItem item = new JMenuItem ("Exit");
ActionListener exitaction = new ActionListener ()
{
public void actionPerformed (ActionEvent e)
{
System.exit (0);
}
};
button.addActionListener (exitaction);
item.addActionListener (exitaction);
但是,我建议不要使用System.exit(0)
。关闭程序的更好方法(我假设基本上是一个JFrame
)是设置
frame.setDefaultCloseOperation(JFrame.DISPOSE\u ON\u CLOSE)
(其中,frame
是程序的窗口)
在
ActionListener
中调用frame.dispose()
,您可以创建一个Action
对象,并将其用于JButton
和JMenuItem
Action exit = new AbstractAction() {
private static final long serialVersionUID = -2581717261367873054L;
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
};
exit.putValue(Action.NAME, "Exit");
exit.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_X);
JButton exitButton = new JButton(exit);
JMenuItem exitItem = new JMenuItem(exit);
我认为最好的办法是在JMENUIGET和JButton的事件侦听器中登记相同的ActualListNever实例,就像使用旧的命令设计模式。
我不建议尝试欺骗事件“引擎”,比如让JMenuItem触发与按下JButton相关的事件,因为这并不是正在发生的事情,但您似乎希望将这两个操作重复用于两个不同的事件。您可以尝试将按钮另存为类字段
private JButton button;
并在菜单项的click事件处理程序中插入代码
button.doClick();
但是的解决方案更优雅。实际上,最好将其封装在一个动作中。这样,您也可以使用键绑定。至于关闭应用程序,我发现依赖System.exit比祈祷我所有的帧都消失,所有剩余的线程都被释放要干净得多