2012-05-24 2 views
2

Предположим, у меня есть JMenuItem с текстом внутри «Exit» и JButton с текстом «Exit», , который будет использовать JButton, это System.exit (0), конечно, используя Action Listener, Ok i Know, я могу поместить те же коды при нажатии на JMenuItem, но не существует способа, что, когда я нажимаю на JMenuItem, JButton нажимается так, что выполняются следующие команды (JButton)?Как связать JMenuItem с JButton

ответ

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); 
+3

+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 это окно программы)

и призывая frame.dispose() в ActionListener.

+3

На самом деле, лучше инкапсулировать это в действие. Таким образом, вы также можете использовать KeyBindings. Что касается закрытия приложения, я считаю, что намного чище полагаться на System.exit, чем молиться за то, чтобы все мои кадры исчезли, и что все мои оставшиеся потоки являются демонами –

0

Я считаю, что лучший способ сделать это, чтобы зарегистрировать тот же экземпляр ActionListener в слушателях событий обоих JMenuItem и JButton, это как с использованием старого шаблона проектирования Command.

Я бы не рекомендовал пытаться обмануть механизм событий, как если бы JMenuItem пожаловал событие, связанное с нажатием кнопки JButton, поскольку это не то, что происходит, но то, что вам кажется нужным, состоит в том, чтобы повторно использовать оба действия для 2 отдельные события.

0

Вы можете попытаться сохранить кнопки как поле класса

private JButton button; 

и вставить в обработчик события щелчка пункта меню Кодекса

button.doClick(); 

но решение SoboLAN изящнее ,

 Смежные вопросы

  • Нет связанных вопросов^_^