2017-02-09 6 views
0

Я хочу предоставить пользователям возможность скрывать/отображать содержимое панели вкладок без добавления дополнительных кнопок в пользовательский интерфейс. Один из способов, я думал, должен был предоставить «фиктивную» вкладку в tabpane и при ее выборе, все содержимое tabpane будет скрыто, за исключением заголовков. При выборе любой другой вкладки содержимое снова станет видимым. Я попытался изменить ширину min/max/pref tabpane.JavaFX- как скрыть область содержимого вкладки и показать только заголовки вкладок при выборе конкретной вкладки

ответ

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

Результат:

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 сек на вкладку области, как и в этом answer (одна кнопка, чтобы скрыть и показать), что может быть более эргономичным, чем дополнительный Tab.

 Смежные вопросы

  • Нет связанных вопросов^_^