Javafx如何隐藏/取消隐藏选项卡窗格上的选项卡

Javafx如何隐藏/取消隐藏选项卡窗格上的选项卡,javafx,Javafx,我有一个tabpane,根据正在发生的事情,我想让某些选项卡不可见,而其他选项卡可见。场景和选项卡都在FXML中定义 我知道我可以使用: tabPane.getTabs().add(0, tab1); 及 但是我的所有选项卡,包括tab1,都是在FXML中定义的。如果我可以获取并保存所有已定义的选项卡并保存它们,以便以后可以重新添加它们,那就可以了。您上面的解决方案很好。只需确保在FXML中为要操作的每个选项卡提供一个ID <Tab fx:id="myTab1">....<

我有一个tabpane,根据正在发生的事情,我想让某些选项卡不可见,而其他选项卡可见。场景和选项卡都在FXML中定义

我知道我可以使用:

tabPane.getTabs().add(0, tab1);


但是我的所有选项卡,包括tab1,都是在FXML中定义的。如果我可以获取并保存所有已定义的选项卡并保存它们,以便以后可以重新添加它们,那就可以了。

您上面的解决方案很好。只需确保在FXML中为要操作的每个选项卡提供一个ID

 <Tab fx:id="myTab1">....</Tab>
控制器:

    package application;

import java.util.ArrayList;
import java.util.Collection;
import java.util.stream.Collectors;

import javafx.fxml.FXML;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;

public class TestController {

    @FXML
    private TabPane tabPane;

    @FXML
    private Tab tab1, tab2, tab3, tab4;

    Collection<Tab> tabs = new ArrayList<>();
    Collection<String> openTabIds = new ArrayList<>();

    @FXML
    private void initialize() {
        tabs.add(tab1);
        tabs.add(tab2);
        tabs.add(tab3);
        tabs.add(tab4);
    }

    @FXML
    void openTabs() {
        openTabIds.stream().forEach(string -> {
            tabs.stream()
                .filter(tab -> tab.getId().equals(string)).findFirst()
                .ifPresent(tab -> tabPane.getTabs().add(tab));
        });
    }

    @FXML
    void saveTabs() {
        openTabIds = tabPane.getTabs().stream().map(tab -> tab.getId()).collect(Collectors.toList());
    }

}
包应用;
导入java.util.ArrayList;
导入java.util.Collection;
导入java.util.stream.collector;
导入javafx.fxml.fxml;
导入javafx.scene.control.Tab;
导入javafx.scene.control.TabPane;
公共类测试控制器{
@FXML
私有选项卡窗格选项卡窗格;
@FXML
专用选项卡tab1、tab2、tab3、tab4;
集合选项卡=新建ArrayList();
集合openTabIds=newarraylist();
@FXML
私有void初始化(){
tabs.add(tab1);
tabs.add(tab2);
tabs.add(tab3);
tabs.add(tab4);
}
@FXML
void openTabs(){
openTabIds.stream().forEach(字符串->{
tabs.stream()
.filter(tab->tab.getId().equals(string)).findFirst()
.ifPresent(tab->tabPane.getTabs().add(tab));
});
}
@FXML
void saveTabs(){
openTabIds=tabPane.getTabs().stream().map(tab->tab.getId()).collect(Collectors.toList());
}
}

您上面的解决方案很好。只需确保在FXML中为要操作的每个选项卡提供一个ID

 <Tab fx:id="myTab1">....</Tab>
控制器:

    package application;

import java.util.ArrayList;
import java.util.Collection;
import java.util.stream.Collectors;

import javafx.fxml.FXML;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;

public class TestController {

    @FXML
    private TabPane tabPane;

    @FXML
    private Tab tab1, tab2, tab3, tab4;

    Collection<Tab> tabs = new ArrayList<>();
    Collection<String> openTabIds = new ArrayList<>();

    @FXML
    private void initialize() {
        tabs.add(tab1);
        tabs.add(tab2);
        tabs.add(tab3);
        tabs.add(tab4);
    }

    @FXML
    void openTabs() {
        openTabIds.stream().forEach(string -> {
            tabs.stream()
                .filter(tab -> tab.getId().equals(string)).findFirst()
                .ifPresent(tab -> tabPane.getTabs().add(tab));
        });
    }

    @FXML
    void saveTabs() {
        openTabIds = tabPane.getTabs().stream().map(tab -> tab.getId()).collect(Collectors.toList());
    }

}
包应用;
导入java.util.ArrayList;
导入java.util.Collection;
导入java.util.stream.collector;
导入javafx.fxml.fxml;
导入javafx.scene.control.Tab;
导入javafx.scene.control.TabPane;
公共类测试控制器{
@FXML
私有选项卡窗格选项卡窗格;
@FXML
专用选项卡tab1、tab2、tab3、tab4;
集合选项卡=新建ArrayList();
集合openTabIds=newarraylist();
@FXML
私有void初始化(){
tabs.add(tab1);
tabs.add(tab2);
tabs.add(tab3);
tabs.add(tab4);
}
@FXML
void openTabs(){
openTabIds.stream().forEach(字符串->{
tabs.stream()
.filter(tab->tab.getId().equals(string)).findFirst()
.ifPresent(tab->tabPane.getTabs().add(tab));
});
}
@FXML
void saveTabs(){
openTabIds=tabPane.getTabs().stream().map(tab->tab.getId()).collect(Collectors.toList());
}
}

您的意思是隐藏选项卡的内容?您的
FXML
有控制器?您好。谢谢你看我的问题。是的,我的应用程序有一个控制器。我想隐藏整个选项卡(选项卡窗格上的选项卡以及所有内容),然后在不同的条件下再次显示。你是说隐藏选项卡的内容?您的
FXML
有控制器?您好。谢谢你看我的问题。是的,我的应用程序有一个控制器。我想隐藏整个选项卡(选项卡窗格上的选项卡以及所有内容),然后在不同的条件下再次显示。是的。就这么简单。漂亮的示例/代码。谢谢,是的。就这么简单。漂亮的示例/代码。非常感谢。
    package application;

import java.util.ArrayList;
import java.util.Collection;
import java.util.stream.Collectors;

import javafx.fxml.FXML;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;

public class TestController {

    @FXML
    private TabPane tabPane;

    @FXML
    private Tab tab1, tab2, tab3, tab4;

    Collection<Tab> tabs = new ArrayList<>();
    Collection<String> openTabIds = new ArrayList<>();

    @FXML
    private void initialize() {
        tabs.add(tab1);
        tabs.add(tab2);
        tabs.add(tab3);
        tabs.add(tab4);
    }

    @FXML
    void openTabs() {
        openTabIds.stream().forEach(string -> {
            tabs.stream()
                .filter(tab -> tab.getId().equals(string)).findFirst()
                .ifPresent(tab -> tabPane.getTabs().add(tab));
        });
    }

    @FXML
    void saveTabs() {
        openTabIds = tabPane.getTabs().stream().map(tab -> tab.getId()).collect(Collectors.toList());
    }

}