Java - возможно ли переопределить ActionListener в суперклассе? - PullRequest
3 голосов
/ 13 марта 2010

Если есть два класса, Class A и Class B, B является подклассом A ... если мой класс A (суперкласс) имеет JButton с ActionListener, который реализован анонимным внутренним класс, как я могу переопределить, что кнопка делает в подклассе?

Ответы [ 3 ]

3 голосов
/ 13 марта 2010

Хм, вы можете заставить слушателя вызвать какой-нибудь защищенный метод:

    button.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            doStuff();
        }
    });

Затем вы можете переопределить doStuff в подклассе. Это кажется проще, чем копаться в событиях больше, чем нужно.

1 голос
/ 13 марта 2010

Ваш единственный вариант - удалить текущий ActionListener и добавить новый. Вы не можете расширить анонимный внутренний класс по определению: он анонимный.

1 голос
/ 13 марта 2010

Я не совсем уверен, как выглядит ваш код, но вот довольно общее «решение» (не проверено):

for (ActionListener al : super.getThatButton().getActionListeners())
{
    super.getThatButton().removeActionListener(al);
}

И добавьте новый ActionListener впоследствии. Я думаю это то, что вы, возможно, ищете, но я не уверен. Я бы просто добавил еще один ActionListener или заставил бы его использовать Actions вместо ActionListener.

...