web-dev-qa-db-ja.com

Javafxを使用して特定のタブが1つ選択されている場合、どうすればアクションを実行できますか

TabPaneの1つのタブがクリックされたときに何かをしようとしています。アクションイベントを使用しようとしましたが、機能しません。

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

[編集済み]

それを行う正しい方法:

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

何をしようとしているのか、どの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

特定のタブ用(ただし、これはまだ試していません)。

13
Puce

Puceが言っていたように、selectedItemPropertyまたはselectedIndexPropertyを使用してこれを行います。ここでは、選択した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オブジェクトそのものだと思います。

12
yaakuro

これが最も簡単な方法ではないでしょうか

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