假设我有一个带有“Exit”文本的 JMenuItem,还有一个带有“Exit”文本的 JButton,JButton 将使用的命令是 System.exit(0),当然使用 Action Listener,我知道,我可以在单击 JMenuItem 时放置相同的代码,但没有办法,当我单击 JMenuItem 时,单击 JButton,然后执行以下命令(JButton 命令)?
问问题
1239 次
4 回答
8
您可以做的是创建一个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);
于 2012-05-24T14:53:41.797 回答
4
一个很好的方法是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)
. 关闭程序的更好方法(我假设基本上是 a JFrame
)是通过设置
frame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE)
(frame
程序的窗口在哪里)
并调用frame.dispose ()
.ActionListener
于 2012-05-24T14:53:30.763 回答
0
于 2012-05-24T14:56:06.783 回答
0
我认为最好的方法是在 JMenuItem 和 JButton 的事件侦听器中注册相同的 ActionListener 实例,这就像使用旧的 Command 设计模式一样。
我不建议尝试欺骗事件“引擎”,例如让 JMenuItem 触发与按下 JButton 相关的事件,因为这不是正在发生的事情,但您似乎想要将这两个动作重用于 2 个不同的事件。
于 2012-05-24T14:54:20.820 回答