我在java 1.8.0_25中遇到了StyleManager的问题。如果我直接将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应用于所有场景
答案 0 :(得分:1)
它没有使用null
值正确初始化(在Oracle Java 8u92 32位上检查)。我改为使用STYLESHEET_MODENA
:
...
@Override
public void start(Stage primaryStage) throws Exception {
Application.setUserAgentStylesheet(Application.STYLESHEET_MODENA);// no null!
StyleManager.getInstance().addUserAgentStylesheet("TabPaneTest.css");
...
答案 1 :(得分:0)
在StyleManager.getInstance().addUserAgentStylesheet("TabPaneTest.css");
之后致电primaryStage.show();
。
自Java 8u40以来我遇到了同样的问题并以这种方式修复了它。不幸的是,我还没有找到用于添加全局样式表的公共API。