2013-02-04 8 views
11

che sto cercando di fare qualcosa quando una scheda della mia tabPane viene cliccato, ho provato l'uso Azione evento, ma non funziona:Come posso fare una certa azione quando viene selezionata una scheda specifica utilizzando JavaFX

public void tabPressClicked (ActionEvent event){ 
     comboBoxPresYear.setVisible(true); 
     lblPresYear.setVisible(true); 
    } 

[Modificato]

Il modo giusto per farlo:

tabPresentation.setOnSelectionChanged(new EventHandler<Event>() { 
      @Override 
      public void handle(Event t) { 
       if (tabPresentation.isSelected()) { 
        comboBoxPresYear.setVisible(true); 
        lblPresYear.setVisible(true); 
       } 
      } 
     }); 

risposta

13

non sono sicuro di quello che stai cercando di fare/cosa ActionEvent vi aspettate, ma provo neanche Somet hing come:

tabPane.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() { 
    @Override 
    public void changed(ObservableValue<? extends Number> ov, Number oldValue, Number newValue) { 
     // do something... 
    } 
}); 

se si vuole fare qualcosa quando cambia la selezione (nessuna scheda)

o provare:

http://docs.oracle.com/javafx/2/api/javafx/scene/control/Tab.html#setOnSelectionChanged%28javafx.event.EventHandler%29

per una scheda specifica (ho provato, non questo ancora, però).

+0

cosa ho bisogno è quando seleziono una scheda specifica (tabPress) impostare una comboBox e un'etichetta visibile, solo che –

+0

basta aggiungere se (newValue = yourSpecificTabNUmber) {comboBoxPresYear.setVisible (true); lblPresYear.setVisible (true);} al metodo modificato :) – invariant

+1

Hai provato Tab.setOnSelectionChanged che ho menzionato? – Puce

11

Lo fai con lo selectedItemProperty o selectedIndexProperty come stava dicendo Puce. Ecco la soluzione con il selectedItemProperty che credo sia meglio, perché si ottiene il Tab elemento selezionato si

tabPane.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Tab>() { 

    @Override 
    public void changed(ObservableValue<? extends Tab> observable, Tab oldTab, Tab newTab) { 
     if(newTab == tabPresentation) { 
      comboBoxPresYear.setVisible(true); 
      lblPresYear.setVisible(true);} 
     } 
    }); 

Suppongo che il tabPresentation è l'oggetto Tab stesso.

+0

Questo è davvero bello, perché ottengo direttamente la voce della scheda e non è necessario fare riferimento a un numero di scheda specifico, che potrebbe cambiare. – tareq

0

Non sarebbe questo il modo più semplice per farlo

tab.selectedProperty().addListener((observable, oldValue, newValue) -> { 
     if (newValue) { 
      comboBoxPresYear.setVisible(true); 
      lblPresYear.setVisible(true);} 
     } 
    }); 
Problemi correlati