2013-07-08 6 views
8

değiştirir hereJavaFX TabPane: seçime dinlemek için nasıl kullanıcı başka bir sekmesinden gittiğinde ben ben kod sözü kullanamaz Sahne Builder ile benim form tasarımı yapılmış beri, bazı işlemleri yapmak istiyorum

(O TabPaneBuilder sınıf kullanılır)

Bu kodun işe yarayacağını tahmin ediyorum ancak sekme seçim değişikliklerine tepki vermiyor.

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"); 
     } 
    } 
); 

söz konusu kod işe yaramadı neden:

@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"); 
      } 
     } 
    } 
); 

cevap

21

değişiklik dinleyici kullanmak için doğru yol budur?

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

Or: değişikliğinizin dinleyici yerine "selectedItem"


bir sekme eklendi veya çıkarıldığında dışarı bulma biraz daha zahmetlidir ve " selectionModel" değişikliklere dinler çünkü onun sanırım Java 8, lambda ifadesini kullanır ....

chatTabs.getSelectionModel().selectedItemProperty().addListener((ov, oldTab, newTab) -> { 
     System.err.println("changed"); 
    }); 
İlgili konular