Я хочу предоставить пользователям возможность скрывать/отображать содержимое панели вкладок без добавления дополнительных кнопок в пользовательский интерфейс. Один из способов, я думал, должен был предоставить «фиктивную» вкладку в tabpane и при ее выборе, все содержимое tabpane будет скрыто, за исключением заголовков. При выборе любой другой вкладки содержимое снова станет видимым. Я попытался изменить ширину min/max/pref tabpane.JavaFX- как скрыть область содержимого вкладки и показать только заголовки вкладок при выборе конкретной вкладки
0
A
ответ
0
Вы можете просто установить max height из TabPane
:
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
сек на вкладку области, как и в этом answer (одна кнопка, чтобы скрыть и показать), что может быть более эргономичным, чем дополнительный Tab
.