Javafx如何在tabpane上隐藏/取消隐藏选项卡

时间:2017-02-02 16:59:16

标签: javafx

我有tabpane,根据发生的事情,我想让某些标签看不见,其他标签可见。场景和标签都在FXML中定义。

我知道我可以使用:

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

tabPane.getTabs().remove(tab1);

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

1 个答案:

答案 0 :(得分:0)

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

 <Tab fx:id="myTab1">....</Tab>

对于此示例,我使用选项卡控件的关闭策略从场景中删除选项卡。但这应该为您提供足够的信息。这是一个可以指向正确方向的工作解决方案:

    <?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane prefHeight="250.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.TestController">
   <children>
      <TabPane fx:id="tabPane" layoutX="14.0" layoutY="14.0" prefHeight="294.0" prefWidth="446.0" AnchorPane.bottomAnchor="30.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
        <tabs>
          <Tab fx:id="tab1" text="Tab 1">
            <content>
              <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
            </content>
          </Tab>
          <Tab fx:id="tab2" text="Tab 2">
            <content>
              <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
            </content>
          </Tab>
            <Tab fx:id="tab3" text="Tab 3">
               <content>
                  <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
               </content>
            </Tab>
            <Tab fx:id="tab4" text="Tab 4">
               <content>
                  <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
               </content>
            </Tab>
        </tabs>
      </TabPane>
      <ButtonBar layoutX="138.0" layoutY="216.0" prefHeight="40.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.rightAnchor="0.0">
        <buttons>
          <Button mnemonicParsing="false" onAction="#saveTabs" text="Save" />
            <Button mnemonicParsing="false" onAction="#openTabs" text="Open" />
        </buttons>
      </ButtonBar>
   </children>
</AnchorPane>

主类:

    package application;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;


public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            FXMLLoader loader = new FXMLLoader();
            Parent node = loader.load(Main.class.getClassLoader().getResource("fxml/TestFXML.fxml").openStream());
            Scene scene = new Scene(node,400,400);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

控制器:

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

}