选择选项卡时更新字段

时间:2016-11-01 22:54:52

标签: java javafx

我正在开发一个使用javafx的项目,我遇到了一个我不知道如何解决的问题。我对整个gui事情都很陌生,但这似乎是一个很容易解决的问题,所以我不知道为什么我似乎无法在网上找到任何有用的东西。

该应用程序由许多选项卡组成,我们希望每当选择新选项卡时,选项卡都会在窗格上调用方法。然后,此方法将根据特定选项卡更新组合框或talbelview。

在我们定义选项卡并将它们添加到tabPane的类中,我们可以通过向tabPane添加一个监听器来获取所选选项卡,但我不确定实际的Tab对象是否可以访问窗格上的函数或其他任何可能有用的函数。

我成像解决这个问题的最佳方法是将一个监听器添加到“此选项卡/窗格被选中/对焦”,但我还没有找到类似的东西。

2 个答案:

答案 0 :(得分:2)

您可以向需要此类更新的每个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();
}

您还可以将更新程序设置为Tab内容的用户数据,如果这对您更方便:

//    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();
                }
            }
        }
    });

答案 1 :(得分:0)

如果您查看here,您可以在字段摘要中查找您要查找的事件,即。 SELECTION_CHANGED_EVENT。只需为每个标签添加此事件的监听器,您就应该是金色的。