ChangeListener 未按预期用于 JTabbedPane

ChangeListener not working as intended for 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);

您在调用 new ChangeListener 时实施了错误的 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);

正在导入错误的 ChangeListener - 检查相应的导入语句。应该是

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

可能导入了错误的 class,如:

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

如果需要这些导入 (javaFX),您必须在创建侦听器时使用完全限定的 class 名称:

javax.swing.event.ChangeListener changeListener = 
    new javax.swing.event.ChangeListener() {
        ...