2013-07-08 4 views
8

変更hereJavaFXのTabPane:選択を聞くためにどのようにユーザーが別のタブから行くとき、私はコードが言及し使用することはできませんシーンBuilderで、私のフォームデザインを作ったので、私は、いくつかのアクションをしたい

(彼は TabPaneBuilderクラスを使用しました)

このコードはうまくいくと思っていましたが、タブ選択の変更に反応しません。問題のコードは動作しませんでしたなぜ

chatTabs.getSelectionModel().selectedItemProperty().addListener(
    new ChangeListener<Tab>() { 
     @Override 
     public void changed(ObservableValue<? extends Tab> ov, Tab t, Tab t1) { 
      System.out.println("Tab Selection changed"); 
     } 
    } 
); 

@FXML 
protected TabPane chatTabs; 
. 
.  
. 
chatTabs.selectionModelProperty().addListener(
    new ChangeListener<SingleSelectionModel<Tab>> { 
      @Override 
      public void changed(ObservableValue<? extends SingleSelectionModel<Tab>> ov, SingleSelectionModel<Tab> t, SingleSelectionModel<Tab> t1) { 
       System.err.println("changed"); 
      } 
     } 
    } 
); 

答えて

21

変更リスナーを使用するための正しい方法はこれですか?私はそのあなたの変更リスナーがタブが追加または削除されたときに見つける代わりに「selectedItem


の「selectionModel」での変更を待機するので、することは少しトリッキーです推測:

tabs.addListener((Change<? extends Tab> change) -> { 
    while(change.next()) { 
    if(change.wasAdded()) { 
     for(final Tab tab : change.getAddedSubList()) { 
     System.out.println("Tab Added: " + tab); 
     } 
    } else if(change.wasRemoved()) { 
     // ... 
    } 
    } 
}); 
6

またはINラムダ式を使用したJava 8 ...

関連する問題

 関連する問題