2016-01-13 73 views
2

我想通过css-file将多种样式(字体,字体大小)应用于我的组件。
(我使用的是oracle的SceneBuilder 2.0
所以我添加了我的css文件到顶层组件。在css中设置JavaFX .root样式

我的CSS-文件看起来是这样的:
Application.css

.root { 
    -fx-font: 14px Arial; 
} 

.button { 
    -fx-font: 28px Arial; 
} 

我Application.fxml看起来是这样的:

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

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


<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="240.0" prefWidth="320.0" stylesheets="@Application.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
    <children> 
     <Text strokeType="OUTSIDE" strokeWidth="0.0" text="MyText" /> 
     <Label text="MyLabel" /> 
     <Button mnemonicParsing="false" text="MyButton" /> 
    </children> 
</VBox> 

现在我添加一个文本元素或无标记元素到我的窗格中,字体不受根节点的影响。但是,如果我将Button-Element添加到我的窗格,则.button的样式会被应用。
我预计.root节点会影响任何其他元素的风格。像在这个回答的问题,但它没有工作: Set Font globally in JavaFX
任何人都可能解释我做错了什么?

存档类似的财产以后的唯一途径是:直接设置样式为:

-fx-font: 14px Arial; 

Style,我希望我能在CSS文件中存储。

+0

尝试明确地向根元素添加'root'风格类,即''。我知道何时将样式表添加到场景的场景中,场景的根将自动获取'.root'样式类,但是我不知道在将样式表添加到父元素时是否也是如此。 –

+0

@James_D会实际工作,但我不认为它是如何工作的。对于没有设置样式类的按钮而言。虽然我担心如果我的某个场景真的需要一个可能用于根元素的样式类,我会遇到问题。 – KnusperPudding

+0

[Button](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html#button)默认具有'button'风格类。 [VBox](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html#vbox)没有默认样式类。如果你认为你可能把它嵌入到一个不同根的场景中,你应该为'VBox'选择一个除'root'以外的样式类。 –

回答

1

我删除了我以前的答案。这不准确,有点令人困惑。

容器控件没有属性-fx-font。所以当你定义时:

.root { 
    -fx-font: 14px Arial; 
} 

它根本没有效果。

如果你想设置字体为所有儿童控制你应该做的:

.root * { 
    -fx-font: 14px Arial; 
} 

,或者如果你想改变一个容器的只有特定的控制:

.table-view .label { 
    -fx-font: 14px Arial; 
} 

或所有标签应用程序:

.label { 
    -fx-font: 14px Arial; 
}