StyleManager没有正确应用CSS

时间:2015-03-20 20:25:11

标签: java javafx-2 javafx-8 scenebuilder

我在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,这就是它的假设:

The css is applied when I don't use StyleManager

然而,当我注释掉直接将css应用到场景并使用StyleManager时,这就是我得到的:

Using StyleManager no css is applied

有没有人遇到过StyleManager这个问题?不幸的是,我们有一个很大的应用程序,它使用StyleManager将CSS应用于所有场景

2 个答案:

答案 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。