2017-05-30 153 views
0

我想检测选项卡何时发生变化并检索选定的索引。我所能找到的所有例子都显得过时,并且我无法成功实现它们。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); 

回答

5

你执行了错误的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); 
2

正在导入错误的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() { 
     ...