我想为用户提供隐藏/取消隐藏选项卡窗格内容的方法,而无需向UI添加其他按钮。我认为一种方法是在tabpane中提供“虚拟”选项卡并选择它,tabpane的所有内容都将被隐藏,除了标题。在选择任何其他选项卡时,内容将再次可见。我尝试改变tabpane的最小/最大/ pref宽度。
答案 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);
}
}
结果:
注意强>
您可以使用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
更符合人体工程学。