Я сталкиваюсь с проблемой с 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 это выглядит так:
Однако, когда я комментирую применение css непосредственно к сцене и используя StyleManager, это то, что я получаю:
Кто-нибудь испытал эту проблему с помощью StyleManager? К сожалению, у нас есть большое приложение, которое использует StyleManager для применения CSS ко всем сценам
Он не получает правильную инициализацию с 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");
...
Вызов StyleManager.getInstance().addUserAgentStylesheet("TabPaneTest.css");
после primaryStage.show();
,
Я столкнулся с той же проблемой, что и Java 8u40, и исправил ее таким образом. К сожалению, я не нашел публичный API для добавления глобальной таблицы стилей.
com.sun.javafx.css.StyleManager
в коде приложения не рекомендуется, поскольку оно не поддерживается : «Как всегда, непубличный API (или, скорее, неподдерживаемый API), то есть все, что не находится в пространстве имен javafx, напримерcom.sun.*
) не может зависеть от выпуска к выпуску. "