假设我有一个带有“Exit”内部文本的JMenuItem,以及一个带有“Exit”文本的JButton, JButton将使用的命令是System.exit(0),当然使用Action Listener,Ok i Know,我可以在点击JMenuItem时输入相同的代码,但是没有办法,当我点击JMenuItem,单击JButton,然后执行以下命令(JButton命令)?
答案 0 :(得分: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);
答案 1 :(得分: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)
。关闭程序(我假设基本上是JFrame
)的更好方法是设置
frame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE)
(其中frame
是程序的窗口)
并在frame.dispose ()
。
ActionListener
答案 2 :(得分:0)
我认为最好的方法是在JMenuItem和JButton的事件监听器中注册相同的ActionListener实例,就像使用旧的Command设计模式一样。
我不建议尝试欺骗事件'引擎',就像让JMenuItem触发与按下JButton相关的事件一样,因为那不是正在发生的事情,但你似乎想要的是将两个动作重用于2个不同的事件
答案 3 :(得分:0)