ChangeListener не работает должным образом для JTabbedPane

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

Это заставляет меня преобразовать мой changeListener в javax.swing.event.ChangeListener, но в то же время не позволяет мне это скомпилировать. Где я ошибаюсь?

ChangeListener changeListener = new ChangeListener() {
          public void stateChanged(ChangeEvent e) {
            JTabbedPane sourceTabbedPane = (JTabbedPane) e.getSource();
            int index = sourceTabbedPane.getSelectedIndex();
            System.out.println("Tab changed to: " + index);
          }

        @Override
        public void changed(ObservableValue arg0, Object arg1, Object arg2) {
            // TODO Auto-generated method stub

        }
        };
        tabbedPane.addChangeListener((javax.swing.event.ChangeListener) changeListener);

person J.Kirk.    schedule 30.05.2017    source источник


Ответы (2)


Вы реализуете неправильный ChangeListener, когда вызываете new ChangeListener. Проверьте свой импорт. Вы должны реализовать javax.swing.event.ChangeListener, но похоже, что на самом деле вы реализуете javafx.beans.value.ChangeListener.

Если вы не хотите изменять свой импорт, следующее тоже сработает.

  javax.swing.event.ChangeListener changeListener = new javax.swing.event.ChangeListener() {
      @Override
      public void stateChanged(ChangeEvent e) {
        JTabbedPane sourceTabbedPane = (JTabbedPane) e.getSource();
        int index = sourceTabbedPane.getSelectedIndex();
        System.out.println("Tab changed to: " + index);
      }
    };
    tabbedPane.addChangeListener(changeListener);
person Samuel    schedule 30.05.2017

Импортируется неверный ChangeListener — проверьте соответствующий оператор импорта. Должен быть

import javax.swing.event.ChangeListener;
// or import javax.swing.event.*;

Вероятно, импортируется неправильный класс, например:

import javafx.beans.value.ChangeListener;
// or import javafx.beans.value.*;

Если эти импорты (javaFX) необходимы, вы должны использовать полное имя класса при создании слушателя:

javax.swing.event.ChangeListener changeListener = 
    new javax.swing.event.ChangeListener() {
        ...
person user85421    schedule 30.05.2017