JavaFX TabPane : How to listen to selection changes

标签 java javafx listener propertychangelistener

我想在用户从一个选项卡转到另一个选项卡时执行一些操作,因为我使用 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/

相关文章:

java - 如何在 CompletableFuture.allOf 之后调用无参数函数

java - EJB 不是 "visible"给 EJB 管理器。不能使用 CDI 或 JNDI 来引用它

java - 为什么我们允许在 java 中有一个 final main 方法?

java - 如何在 JavaFX 中保存对 ImageView 所做的更改?

java - 更改 ComboBox 的项目而不更改 ValueProperty

spring - 如何在Spring boot中添加一个tomcat服务器LifeCycleListener

java - 是否可以在 JAVA 中以非字母顺序返回 SOAP 消息?

javafx - 为什么当我使用 scenebuilder 创建选项卡时它说不是节点?

javafx - 如何在 FXML 中仅显示 JavaFX DatePicker 日历弹出窗口而不显示 ComboBox?

view - Symfony2 : Change rendered view with a listener