Почему ChangeListener никогда не используется локально?

Я не уверен, почему я получаю предупреждение "Метод tabChanged(ChangeEvent) из типа new ChangeListener(){} никогда не используется локально"

private void setUpTabbedPane() {
            this.tabbedPane = new JTabbedPane();
            this.tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
            String titles[] = { "A", "B", "C", "D", "E", "F" };

            for (int i = 0, n = titles.length; i < n; i++) {
                addTabs(this.tabbedPane, titles[i]);
            }

            this.tabbedPane.addChangeListener(new ChangeListener() {

                public void tabChanged(ChangeEvent ev) {
                    try {
                        mediaPlayer.stop();

                    } catch (Exception e) {
                        System.out.println("Sorry, something went wrong.");
                        e.printStackTrace();
                    }
                }

                @Override
                public void stateChanged(ChangeEvent e) {
                    // TODO Auto-generated method stub

                }
            });

        }

person Davidson Otobo    schedule 13.05.2017    source источник


Ответы (1)


Вы объявили «осиротевший» метод

Как говорится в предупреждении, вы объявили метод tabChanged() в ChangeListener, который нигде не упоминается и никогда никем не будет вызываться.

Если вы хотите, чтобы ваш код запускался всякий раз, когда происходят изменения, вам необходимо переопределить метод stateChanged для ChangeListener (как описано в https://docs.oracle.com/javase/7/docs/api/javax/swing/event/ChangeListener.html) вместо объявления нового метода, как вы сделали сейчас.

Простого изменения имени с tabChanged() на stateChanged() ИМХО должно быть достаточно, чтобы этот код работал.

person Peteris    schedule 13.05.2017
comment
Не забудьте добавить аннотацию @Override, которая также будет отлавливать такие «осиротевшие» методы. - person RobCo; 13.05.2017