如何将JMenuItem链接到JButton

时间:2012-05-24 14:48:18

标签: java swing jbutton exit jmenuitem

假设我有一个带有“Exit”内部文本的JMenuItem,以及一个带有“Exit”文本的JButton, JButton将使用的命令是System.exit(0),当然使用Action Listener,Ok i Know,我可以在点击JMenuItem时输入相同的代码,但是没有办法,当我点击JMenuItem,单击JButton,然后执行以下命令(JButton命令)?

4 个答案:

答案 0 :(得分:8)

您可以做的是创建一个Action对象,并将其用于JButtonJMenuItem

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)

您可以尝试将按钮另存为类字段

private JButton button;

并在菜单项的click事件处理程序中插入代码

button.doClick();

SoboLAN的解决方案更优雅。