使用Javafx选择一个特定选项卡时,如何执行某些操作

时间:2013-02-04 16:35:46

标签: javafx-2 javafx

当我点击tabPane的一个标签时,我正在尝试做某事,我尝试过使用动作事件,但它不起作用:

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

[EDITED]

正确的方法:

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

3 个答案:

答案 0 :(得分:13)

我不确定你想要做什么/你期待什么样的ActionEvent但是尝试类似的事情:

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

针对特定标签(但我还没有尝试过)。

答案 1 :(得分:12)

你可以像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对象本身。

答案 2 :(得分:1)

这不是最简单的方法吗

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