JavaFX TabPane remove/removeAll 不起作用
JavaFX TabPane remove/removeAll does not work
美好的一天,我在尝试从 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);
});
}
});
}
您的问题是 pane.getTabs()
returns Tab
的列表,而您正试图在其中找到 String
。您需要一种方法将字符串(选项卡名称?)转换为 TabPane
中的实际 Tab
节点。
其中一种方法是使用选项卡名称和选项卡初始化 Map<String, Tab> map
,然后执行类似以下操作:
List<Tab> tabs = branch.stream().map(map::get).collect(Collectors.toList());
pane.getTabs().removeAll(tabs);
美好的一天,我在尝试从 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);
});
}
});
}
您的问题是 pane.getTabs()
returns Tab
的列表,而您正试图在其中找到 String
。您需要一种方法将字符串(选项卡名称?)转换为 TabPane
中的实际 Tab
节点。
其中一种方法是使用选项卡名称和选项卡初始化 Map<String, Tab> map
,然后执行类似以下操作:
List<Tab> tabs = branch.stream().map(map::get).collect(Collectors.toList());
pane.getTabs().removeAll(tabs);