Способ добавления ActionListener

Допустим, у меня есть кнопка с именем button1. Если я хочу создать actionListener для кнопки, какой метод мне следует выбрать: (во втором случае вам нужно расширить интерфейс actionListener)

// Imports
public class Test{
    JButton test = new JButton();
    Test(){
        // Pretend there is an adapter
        test.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e){
                ...
            }
        });
    ...
}

or

// Imports
public class Test2 extends ActionListener{
    JButton button2 = new JButton();
    Test2(){
        button2.addActionListener(this);
    }
    // Pretend there is an adapter

    public void actionPerformed(ActionEvent e){
        Object src = e.getSource();
        if(src == button2){
            ...
        }else{
            ...
    }
}

person Anonymous181    schedule 07.05.2012    source источник


Ответы (3)


Во втором случае необходимо реализовать интерфейс ActionListener. Кроме этого, ответ "это зависит". Если есть смысл повторно использовать один и тот же прослушиватель действий для нескольких графических компонентов, используйте вторую версию. Если обработка события является разовой операцией для одного компонента, используйте первую версию.

person Óscar López    schedule 07.05.2012

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

person Hovercraft Full Of Eels    schedule 07.05.2012
comment
+1 за то, что ваши классы пользовательского интерфейса не реализуют интерфейсы прослушивателя. - person Robin; 08.05.2012

Если каждый слушатель уникален, вы, вероятно, захотите использовать анонимные классы (первый пример). Если в противном случае вам пришлось бы переписывать один и тот же код снова и снова, то было бы предпочтительнее реализовать его в именованном классе (как во втором примере), чтобы вы могли просто повторно использовать один и тот же слушатель.

Однако вместо того, чтобы расширять ActionListener (как во втором примере), вы, вероятно, обнаружите, что размещение реализации слушателя в другом классе (даже во внутреннем классе, который реализует ActionListener) обеспечивает лучшее логическое логическое разделение вашего кода.

person rob    schedule 07.05.2012