Использование ActionListener с JButton - PullRequest
0 голосов
/ 14 июня 2011

Итак, я новичок в программировании интерфейсов с Java. У меня есть меню JButton, где с каждым JButton связано действие (поэтому я использую новый JButton (действие)), однако после выбора кнопки я хочу закрыть меню, поэтому к каждому JButton прикреплен ActionListener это делает это.

Из соображений красивости мне бы хотелось, чтобы ActionListener шел до действия JButton, но я не могу найти способ сделать это, не включая добавление нового потока или создание нового класса ... У кого-нибудь есть идеи? Кроме того, я использую Java 1.4, так что ничего нового не получается.

Ответы [ 2 ]

0 голосов
/ 15 июня 2011

Альтернативный, надежный подход с использованием внутреннего класса - я знаю, что вы не хотели создавать свой собственный класс, но это делает его довольно простым.

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 голосов
/ 14 июня 2011

РЕДАКТИРОВАТЬ: считается неправильным из-за отсутствия гарантии порядка, в котором выполняются добавленные действия - см. Комментарии

Действие можно назначить с помощью функции:

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

Код является псевдо / непроверенным, но это первое, что я бы попробовал.

...