2013-07-08 12 views
8

chcę zrobić pewne działania, gdy użytkownik przechodzi z jednej karty na inny, ponieważ podjąłem Form Design ze sceny Builder nie można użyć kodu wspomniano here (Używał TabPaneBuilder klasy)JavaFX TabPane: Jak słuchać wyboru zmienia

Zgaduję, że ten kod będzie działał, ale nie reaguje na zmiany zaznaczenia tabulatora.

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

Odpowiedz

21

Prawo sposobem korzystania zmiany słuchacza jest taka:

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

Dlaczego kod w pytaniu nie działa? Chyba jego ponieważ słuchacz zmiana słucha zmian w „selectionModel” zamiast „selectedItem


Znalezienie się, kiedy zakładka została dodana lub usunięta jest trochę trudniejsze:

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

Lub Java 8 z wyrażeniem lambda ...

chatTabs.getSelectionModel().selectedItemProperty().addListener((ov, oldTab, newTab) -> { 
     System.err.println("changed"); 
    }); 
Powiązane problemy