JavaFX TabPane:如何监听选择更改 [英] JavaFX TabPane: How to listen to selection changes

查看:3127
本文介绍了JavaFX TabPane:如何监听选择更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当用户从一个标签转到另一个标签时,我想做一些操作,因为我使用Scene Builder进行了表单设计我不能使用提到的代码 here (他使用 TabPaneBuilder 类)

I want to do some actions when user goes from one tab to another, since i made my form design with Scene Builder I cannot use code mentioned here (He used TabPaneBuilder class)

我猜这个代码可以工作,但它不会对标签选择更改做出反应。

I guessed this code would work but it doesn't react to tab selection changes.

@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");
            }
        }
    }
);


推荐答案

使用更改侦听器的正确方法是:

The right way to use change listener is this:

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

Why code in question didn't work? I guess its because your change listener listens to changes in "selectionModel" instead of "selectedItem"

找出添加或删除标签的时间有点棘手:

Finding out when a tab has been added or removed is a little trickier:

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:如何监听选择更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆