あなたは、このような更新を必要とする各Tab
にRunnable
userData
としてを追加し、選択モデルは、ユーザデータを取得したときに、タブの選択の変更更新をトリガ選択したタブにリスナーを追加し使用することができます。
例あなたはまた、これはあなたのためのより便利であれば、Tab
のコンテンツへのユーザーデータ等のアップデータを設定することができ
@Override
public void start(Stage primaryStage) {
final Label countLabel = new Label("You visited this tab 0 time(s) before.");
// increments visit count every time the tab is activated
Runnable labelUpdater = new Runnable() {
private int count = 0;
@Override
public void run() {
countLabel.setText("You visited this tab " + (++count) + " time(s) before.");
}
};
Tab tab1 = new Tab("tab1");
tab1.setContent(countLabel);
// add runnable as user data
tab1.setUserData(labelUpdater);
TabPane tabPane = new TabPane(tab1, new Tab("tab2"));
// execute update when a newly selected tab contains a updater
tabPane.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
if (newValue != null) {
Runnable updater = (Runnable) newValue.getUserData();
if (updater != null) {
updater.run();
}
}
});
Scene scene = new Scene(tabPane, 300, 300);
primaryStage.setScene(scene);
primaryStage.show();
}
:私はちょうどすることができます
// tab1.setUserData(labelUpdater);
countLabel.setUserData(labelUpdater);
TabPane tabPane = new TabPane(tab1, new Tab("tab2"));
tabPane.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
if (newValue != null) {
Node content = newValue.getContent();
if (content != null) {
Runnable updater = (Runnable) content.getUserData();
if (updater != null) {
updater.run();
}
}
}
});
おかげで、しかし、それを働かせないでください。ペイン自体から呼び出せますか?今、私はこのようなものを持っています "tabPane.addEventHandler(Tab.SELECTION_CHANGED_EVENT、イベント - > System.out.println(" 999 "));"それは動作していないようです。私は、私がオンラインで見つけたメソッドからtabPaneを取得しました。それはうまくいくはずですが、私はイメージが良い方法であることをイメージしています(tabPane @ 320c2196 [styleClass = tab-pane]と言う)。 –
私はイベントハンドラをタブペインではなくタブ自体に追加すると思います。 –