我想在用户从一个选项卡转到另一个选项卡时执行一些操作,因为我使用 Scene Builder 设计了表单,所以我不能使用提到的代码 here (他使用了TabPaneBuilder
类)
我猜这段代码会起作用,但它不会对选项卡选择更改使用react。
@FXML
protected TabPane chatTabs;
.
.
.
chatTabs.selectionModelProperty().addListener(
new ChangeListener<SingleSelectionModel<Tab>> {
@Override
public void changed(ObservableValue<? extends SingleSelectionModel<Tab>> ov, SingleSelectionModel<Tab> t, SingleSelectionModel<Tab> t1) {
System.err.println("changed");
}
}
}
);
最佳答案
更改监听器的正确使用方法是这样的:
chatTabs.getSelectionModel().selectedItemProperty().addListener(
new ChangeListener<Tab>() {
@Override
public void changed(ObservableValue<? extends Tab> ov, Tab t, Tab t1) {
System.out.println("Tab Selection changed");
}
}
);
为什么有问题的代码不起作用?我猜这是因为您的更改监听器会监听“selectionModel
”中的更改,而不是“selectedItem
”
找出标签何时被添加或删除有点棘手:
tabs.addListener( (Change<? extends Tab> change) -> {
while( change.next() ) {
if( change.wasAdded() ) {
for( final Tab tab : change.getAddedSubList() ) {
System.out.println( "Tab Added: " + tab );
}
} else if( change.wasRemoved() ) {
// ...
}
}
} );
关于JavaFX TabPane : How to listen to selection changes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17522686/