2013-02-04 46 views
11

我想,當點擊我的tabPane的一個標籤做一些事情,選擇一個特定的標籤,我嘗試使用操作事件,但它不工作:我怎麼可以做一些動作時使用JavaFX

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

將帖子

做正確的做法:我不知道你正在試圖做/什麼動作事件你期待什麼,但無論是嘗試SOMET

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

回答

13

興象:

tabPane.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() { 
    @Override 
    public void changed(ObservableValue<? extends Number> ov, Number oldValue, Number newValue) { 
     // do something... 
    } 
}); 
,如果你想要做的事

選擇何時更改(任何選項卡)

或嘗試:針對特定標籤

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

(我沒試過儘管如此)。

+0

最簡單的方法我需要的是,當我選擇一個特定的標籤(tabPress)設置一個組合框和一個標籤可見,只是它 –

+0

只需添加如果(NEWVALUE = yourSpecificTabNUmber){comboBoxPresYear.setVisible(true); lblPresYear.setVisible(true);}改變方法:) – invariant

+1

你試過Tab.setOnSelectionChanged我提到過嗎? – Puce

11

你可以像Puce說的那樣使用selectedItemPropertyselectedIndexProperty。這裏與selectedItemProperty我認爲這是更好,因爲你得到的選擇Tab項目本身的解決方案

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

我假設tabPresentationTab對象本身。

+0

這真的很不錯,因爲我直接獲取標籤項目,並且不需要引用可能會更改的特定標籤號碼。 – tareq

0

這是不是可以做

tab.selectedProperty().addListener((observable, oldValue, newValue) -> { 
     if (newValue) { 
      comboBoxPresYear.setVisible(true); 
      lblPresYear.setVisible(true);} 
     } 
    }); 
相關問題