JavaFX TabPane:如何监听选择更改
当用户从一个选项卡转到另一个选项卡时,我想做一些操作,因为我用Scene Builder进行了表单设计我不能使用这里提到的代码(他使用了TabPaneBuilder
类)
我猜这个代码可以工作,但它不会对选项卡选择更改做出反应。
@FXML protected TabPane chatTabs; . . . chatTabs.selectionModelProperty().addListener( new ChangeListener<SingleSelectionModel> { @Override public void changed(ObservableValue<? extends SingleSelectionModel> ov, SingleSelectionModel t, SingleSelectionModel t1) { System.err.println("changed"); } } } );
使用更改侦听器的正确方法是:
chatTabs.getSelectionModel().selectedItemProperty().addListener( new ChangeListener() { @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() ) { // ... } } } );
或者在Java 8中使用lambda表达式….
chatTabs.getSelectionModel().selectedItemProperty().addListener((ov, oldTab, newTab) -> { System.err.println("changed"); });
我认为更好更自然的方法是使用Tab.setOnSelectionChanged。 这是一个实现该方法的完整小程序。 你可以在这里看到更完整的例子: http : //sandsduchon.org/duchon/cs335/fx020.html
请注意,您还应该使用Tab.isSelected正确选择此选项卡或取消选择此选项卡。
import javafx.application.Application; // FX base, requires start(Stage) import javafx.stage.Stage; // required by start (Stage) import javafx.scene.Scene; // no scene --> no display import javafx.scene.control.TabPane; import javafx.scene.control.Tab; public class TabDemo extends Application { public void start (Stage stage) { TabPane tabPane = new TabPane (); Tab tba = new Tab ("one"); Tab tbb = new Tab ("two"); tabPane.getTabs().addAll (tba, tbb); tba.setOnSelectionChanged (e -> System.out.println ( tba.isSelected()? "a selected": "a unselected" ) ); Scene scene = new Scene (tabPane, 200, 50); stage.setScene (scene); stage.setTitle ("A Study of tab listeners"); stage.show (); } // end start } // end class TabDemo