StyleManager неправильно применяет CSS

1

Я сталкиваюсь с проблемой с StyleManager в java 1.8.0_25. Если я приложу файл css непосредственно к сцене, css появится правильно. Однако, если я попытаюсь использовать StyleManager для применения файла css во всех сценах, css не будет применяться.

Здесь простая программа для демонстрации проблемы

public class Test extends Application {

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        Application.setUserAgentStylesheet(null);
        Parent node = new FXMLLoader(getClass().getResource("Testing.fxml")).load();
        Scene scene = new Scene(node);
//      StyleManager.getInstance().addUserAgentStylesheet("TabPaneTest.css");
        scene.getStylesheets().add("TabPaneTest.css");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

}

Testing.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.net.*?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>


<VBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <TabPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" tabClosingPolicy="UNAVAILABLE">
        <tabs>
          <Tab text="Untitled Tab 1">
            <content>
              <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
            </content>
          </Tab>
          <Tab text="Untitled Tab 2">
            <content>
              <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
            </content>
          </Tab>
        </tabs>
      </TabPane>
   </children>
</VBox>

TabPaneTest.css:

.tab-pane .tab {
    -fx-padding: 3 6 1 6;
    -fx-border-style: none;
    -fx-border-color: transparent;
    -fx-border-width: 0;
    -fx-border-insets: 2;
    -fx-background-radius: 3 3 0 0;
    -fx-background-insets: 0 2 0 2;
    -fx-background-color: linear-gradient(green 80%, blue 100%);
}

Без использования StyleManager это выглядит так:

Изображение 174551

Однако, когда я комментирую применение css непосредственно к сцене и используя StyleManager, это то, что я получаю:

Изображение 174551

Кто-нибудь испытал эту проблему с помощью StyleManager? К сожалению, у нас есть большое приложение, которое использует StyleManager для применения CSS ко всем сценам

  • 0
    Использование com.sun.javafx.css.StyleManager в коде приложения не рекомендуется, поскольку оно не поддерживается : «Как всегда, непубличный API (или, скорее, неподдерживаемый API), то есть все, что не находится в пространстве имен javafx, например com.sun.* ) не может зависеть от выпуска к выпуску. "
Теги:
javafx-8
javafx-2
scenebuilder

2 ответа

1

Он не получает правильную инициализацию с null значением (проверено на 32-битном языке Oracle Java 8u92). STYLESHEET_MODENA этого я использую STYLESHEET_MODENA:

    ...
    @Override
    public void start(Stage primaryStage) throws Exception {
        Application.setUserAgentStylesheet(Application.STYLESHEET_MODENA);// no null!
        StyleManager.getInstance().addUserAgentStylesheet("TabPaneTest.css");
        ...
0

Вызов StyleManager.getInstance().addUserAgentStylesheet("TabPaneTest.css"); после primaryStage.show(); ,

Я столкнулся с той же проблемой, что и Java 8u40, и исправил ее таким образом. К сожалению, я не нашел публичный API для добавления глобальной таблицы стилей.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню