Предположим, у меня есть JMenuItem с текстом внутри «Exit» и JButton с текстом «Exit», , который будет использовать JButton, это System.exit (0), конечно, используя Action Listener, Ok i Know, я могу поместить те же коды при нажатии на JMenuItem, но не существует способа, что, когда я нажимаю на JMenuItem, JButton нажимается так, что выполняются следующие команды (JButton)?Как связать JMenuItem с JButton
ответ
Что вы можете сделать, это создать объект 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);
Хороший способ сделать это - установить одинаковые 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
это окно программы)
и призывая frame.dispose()
в ActionListener
.
На самом деле, лучше инкапсулировать это в действие. Таким образом, вы также можете использовать KeyBindings. Что касается закрытия приложения, я считаю, что намного чище полагаться на System.exit, чем молиться за то, чтобы все мои кадры исчезли, и что все мои оставшиеся потоки являются демонами –
Я считаю, что лучший способ сделать это, чтобы зарегистрировать тот же экземпляр ActionListener в слушателях событий обоих JMenuItem и JButton, это как с использованием старого шаблона проектирования Command.
Я бы не рекомендовал пытаться обмануть механизм событий, как если бы JMenuItem пожаловал событие, связанное с нажатием кнопки JButton, поскольку это не то, что происходит, но то, что вам кажется нужным, состоит в том, чтобы повторно использовать оба действия для 2 отдельные события.
Вы можете попытаться сохранить кнопки как поле класса
private JButton button;
и вставить в обработчик события щелчка пункта меню Кодекса
button.doClick();
но решение SoboLAN изящнее ,
+1 Еще лучше ответ –