2017-05-30 1 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

あなたが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); 
2

間違っChangeListenerがインポートされている - 対応するインポート文を確認してください。これらの輸入(JavaFXの)が必要とされている場合

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

リスナーを作成するときに、あなたは完全修飾クラス名を使用する必要があります。それは

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

おそらく間違ったクラスは、のようにインポートされている必要があります:

javax.swing.event.ChangeListener changeListener = 
    new javax.swing.event.ChangeListener() { 
     ... 
関連する問題