/ / Використання ActionListener з JButton - action, jbutton, actionlistener, java1.4

Використання ActionListener за допомогою JButton - action, jbutton, actionlistener, java1.4

Отже, я наче новий інтерфейс програмуванняз явою. У мене є меню JButtons, де кожен JButton має пов’язану з ним дію (тому я використовую новий JButton (дія)), однак після вибору кнопки я хочу закрити меню, тому до кожного JButton додається ActionListener це робить це.

З причин непорозуміння мені хотілося б, якщоActionListener пішов до дії JButton, але я не можу знайти спосіб зробити це, що не передбачає додавання нової нитки або створення нового класу ... Хтось має якісь ідеї? Також я використовую Java 1.4, тому жоден з нові модні речі.

Відповіді:

0 для відповіді № 1

Альтернативний, надійний підхід із використанням внутрішнього класу - я знаю, ви не хотіли створювати свій власний клас, але це тримає його досить просто.

class MenuAction extends Action {
public void actionPerformed() { /* close menu */ }
}

public void MyMenu() { // or where your menu construction code occurs
...
JButton mybutton1 =
new JButton(new MenuAction() {
public void performAction() {
// close the menu first
super.actionPerformed();
// then perform the button"s action
/* button1"s behaviour */
}
});
...

0 для відповіді № 2

EDIT: визнано неправильним через відсутність гарантії щодо порядку виконання додаткових дій - див. коментарі

Дія може бути призначена за допомогою функції:

http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/AbstractButton.html#setAction%28javax.swing.Action%29

Замість того, щоб передавати його через конструктор, просто призначте його згодом:

ActionListener closeMenu = ...;
Action myaction1 = ...;
JButton mybutton1 = new JButton();
mybutton1.addActionListener(closeMenu);
mybutton1.setAction(myaction1);

Код псевдо / неперевірений, але це перше, що я спробував би.