【问题标题】:JavaFX TabPane remove/removeAll does not workJavaFX TabPane 删除/removeAll 不起作用
【发布时间】:2016-04-01 18:39:45
【问题描述】:

您好,我在尝试从 JavaFX 中的 TabPane 中删除选项卡时遇到问题。 我做的第一件事就是将一个字符串的 ArrayList 与从列表中选择的选项卡名称传递给方法,该方法假设从 TabPane 中删除相应的按名称选项卡:

removeBranch.setOnAction(e->{
            ArrayList<String>indexes=new ArrayList(list.getSelectionModel().getSelectedItems());

            entryShifts.removeBranch(indexes);
            list.getItems().removeAll(indexes);

        });

之后我尝试在上述方法中像这样删除它们:

public void removeBranch(ArrayList<String> branch){
           pane.getTabs().removeAll(branch);
    }

但是它不起作用,即使我做了类似的事情(请注意我只传递列表中的名字):

public void removeBranch(ArrayList<String> branch){
        pane.getTabs().remove(branch.get(0));
    }

但如果我这样做,它会起作用(这里我也只从 ArrayList 中删除名字):

public void removeBranch(ArrayList<String> branch){
        pane.getTabs().forEach(i -> {
            if (i.getText().equals(branch.get(0))) {
                Platform.runLater(() -> {
                    pane.getTabs().remove(i);
                });
            }
        });
    }

为什么会这样?我做错了吗?

P.S 我通过遍历 ArrayList 并每次将不同的名称传递给方法来修复它的方式:

indexes.forEach(i->{entryShifts.removeBranch(i);});

public void removeBranch(String branch){
        pane.getTabs().forEach(i -> {
            if (i.getText().equals(branch)) {
                Platform.runLater(() -> {
                    pane.getTabs().remove(i);
                });
            }
        });
    }

【问题讨论】:

    标签: javafx tabpanel


    【解决方案1】:

    您的问题是pane.getTabs() 返回Tab 的列表,而您正试图在其中找到Strings。您需要一种将字符串(选项卡名称?)转换为TabPane 中实际的Tab 节点的方法。

    这样一种方法是拥有一个Map&lt;String, Tab&gt; map,您可以使用选项卡名称和选项卡对其进行初始化,然后执行以下操作:

    List<Tab> tabs = branch.stream().map(map::get).collect(Collectors.toList());
    pane.getTabs().removeAll(tabs);
    

    【讨论】:

    • 好吧,我几乎同时设法解决了这个问题,但我以不同的方式修复了它。我修复它的方式将添加到我的问题中。
    猜你喜欢
    • 2021-01-08
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2016-01-22
    • 2017-04-03
    • 2016-06-27
    • 1970-01-01
    • 2016-10-10
    相关资源
    最近更新 更多