JavaFX 2.0 TabPane: вкладки слева и держите заголовок вкладки горизонтальным

Я пытаюсь разработать GUI для веб-приложения, и я хотел установить TabPane с вкладками, размещенными слева, сохраняя заголовки вкладок горизонтальными. Я уже нашел, как разместить вкладки слева, но после многих поисков мне не удалось установить заголовки в правом выравнивании. Они по-прежнему вертикальные и трудно читаются.

Как я мог это исправить?

6 ответов


для этого есть открытый запрос функции: RT-19547 новый API для поворота текста на вкладках tabpane

запрос функции в настоящее время открыт, но не запланирован для реализации. Вы можете проголосовать или прокомментировать запрос функции и вернуться к этому сообщению StackOverflow, чтобы зарегистрировать свой интерес к функции.

чтобы реализовать это самостоятельно, вам нужно будет создать новый скин TabPane или исправьте существующую кожу TabPane, который скорее всего, не тривиальная.


вы можете использовать CSS для настройки вкладок и меток вкладок:

.tab *.tab-label {
    -fx-rotate: 90;
}

.tab {
    -fx-padding: 3em 0.5em 3em 0.5em;
}

вы можете использовать следующий метод для создания вкладки заголовок

private StackPane createTabHeader(String text, Node graphics){
        return new StackPane(new Group(new Label(text, graphics)));
}

затем вызовите его в своем коде следующим образом:

Tab tab = new Tab();
tab.setGraphic(createTabHeader("TEXT", new ImageView("IMAGE_PATH")));

обратите внимание, что вам нужно установить ширину и высоту вкладок, поскольку они не будут масштабироваться автоматически.

TabPane tabPane = new TabPane(tab);
tabPane.setSide(Side.LEFT);
tabPane.setTabMinWidth(50);
tabPane.setTabMaxWidth(50);
tabPane.setTabMinHeight(200);
tabPane.setTabMaxHeight(200);

// Firstly
tabPane.setSide(Side.LEFT);
tabPane.setRotateGraphic(true);        

Label l = new Label("Titel Tab1");
l.setRotate(90);
StackPane stp = new StackPane(new Group(l));
stp.setRotate(90);
tab1.setGraphic(stp);

l = new Label("Titel Tab2");
l.setRotate(90);
stp = new StackPane(new Group(l));
stp.setRotate(90);
tab2.setGraphic(stp);

tabPane.setTabMinHeight(100);
tabPane.setTabMaxHeight(100);

есть другое решение, установите минимальную ширину и высоту на css и добавьте графический элемент на fxml

-fx-tab-min-width:30;    
-fx-tab-max-width:30;    
-fx-tab-min-height:150;    
-fx-tab-max-height:150;

 <Tab closable="false">
           <graphic>
              <Pane prefHeight="76.0" prefWidth="30.0">
                 <children>
                    <Label layoutX="-35.0" layoutY="23.0" prefHeight="30.0" prefWidth="130.0" text="User">
                       <font>
                          <Font name="SansSerif Regular" size="14.0" />
                       </font></Label>
                 </children>
              </Pane>
           </graphic>
        </Tab>

О, я помню, я столкнулся с этим раньше, просто добавьте StackPane, VBox o Hbox внутри tabHeader и все компоненты, которые вам могут понадобиться, они не будут следовать ориентации вкладки.