JavaFX-如何隐藏选项卡内容区域,并在选择特定选项卡

时间:2017-02-09 16:36:50

标签: java javafx

我想为用户提供隐藏/取消隐藏选项卡窗格内容的方法,而无需向UI添加其他按钮。我认为一种方法是在tabpane中提供“虚拟”选项卡并选择它,tabpane的所有内容都将被隐藏,除了标题。在选择任何其他选项卡时,内容将再次可见。我尝试改变tabpane的最小/最大/ pref宽度。

1 个答案:

答案 0 :(得分:0)

您只需设置TabPane的{​​{3}}:

即可
public class Main extends Application {

    private static final int TABPANE_HEADER_HEIGHT = 29;

    @Override
    public void start(Stage primaryStage) throws Exception{
        BorderPane root = new BorderPane();

        // Add simple tabs
        TabPane tp = new TabPane();
        tp.getTabs().add(new Tab("Tab1", new Label(" Content of the first tab")));
        tp.getTabs().add(new Tab("Tab2", new Label(" Content of the second tab")));

        // Create the Tab which hides the content
        Tab hideTab = new Tab("Hide", new Label(" Content of the third tab"));
        tp.getTabs().add(hideTab);

        hideTab.selectedProperty().addListener((obs, oldval, newval) -> 
            tp.setMaxHeight(((newval) ? TABPANE_HEADER_HEIGHT : -1)));

        root.setTop(tp);

        Scene scene = new Scene(root, 300, 275);
        scene.getStylesheets().addAll(getClass().getResource("style.css").toExternalForm());
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

结果:

enter image description here

注意

您可以使用CSS为.tab-pane添加一个新的伪类,例如, tabcontenthidden。在此伪类中,TabPane的最大高度是选项卡的高度。

的style.css

.root {  TAB_HEADER_HEIGHT: 29; }

.tab-pane:tabcontenthidden { -fx-max-height: TAB_HEADER_HEIGHT; }

.tab-pane {
    -fx-max-height: -1;
    -fx-background-color: orange;
}

在Java代码中,您可以创建PseudoClass之类的

PseudoClass TABPANE_CONTENT_HIDDEN = PseudoClass.getPseudoClass("tabcontenthidden");

您可以使用pseudoClassStateChanged方法激活此伪类:

tabPane.pseudoClassStateChanged(TABPANE_CONTENT_HIDDEN, true); // false to show

<强>注2

您可以将Button添加到标签区域,例如此max height(隐藏和显示一个按钮),这可能比其他Tab更符合人体工程学。