As you know, JavaFX provides from the API many properties that you can set to customize
or make your components to behave as you want. For instance, for a
Button, you can set its font, or its max size.
Using Scene
Builder, these properties can be explored and modified using the
inspector.
However, JavaFX also provides many other properties to have a fine grained customization of your components : the css properties. These properties are typically set from a css stylesheet. For instance, you can set a background image on a Button, change the Button corners, etc...
Using Scene Builder, until now, you could set a css property using the inspector Style and Stylesheet editors. But you had to go to the JavaFX css documentation to know the css properties that can be applied to a given component.
Hopefully, Scene
Builder 1.1 added recently a very interesting new feature : the CSS
Analyzer.
It allows you to explore all the css properties
available for a JavaFX component, and helps you to build your css
rules.
A very simple example : make a Button rounded
Let’s take a
very simple example:
you would like to customize your Buttons to
make them rounded.
First, enable the CSS Analyzer, using the ‘View->Show CSS Analyzer’ menu. Grow the main window, and the CSS Analyzer to get more room:
Then, drop a Button from the Library to the ContentView: the CSS Analyzer is now showing the Button css properties:
As you can see, there is a ‘-fx-background-radius’ css property that allow to define the radius of the background (note that you can get the associated css documentation by clicking on the property name). You can then experiment this by setting the Button style property from the inspector:
As you can see in the
css doc, one can set the same radius for the 4 corners by a simple
number. Once the style value is applied, the Button is now rounded,
as expected.
Look at the CSS Analyzer: the ‘-fx-background-radius’
property has now 2 entries: the default one, and the one we just
entered from the Style property. The new value “win”: it
overrides the default one, and become the actual value (to highlight
this, the cell background becomes blue).
Now, you will
certainly prefer to apply this new style to all the Buttons of your
FXML document, and have a css rule for this.
To do this, save you
document first, and create a css file in the same directory than the
new document.
Create an empty css file (e.g. test.css), and attach
it the the root AnchorPane, by first selecting the AnchorPane, then
using the Stylesheets editor from the inspector:
Add the corresponding css rule to your new test.css file, from your preferred editor (Netbeans for me ;-) and save it.
.button {
-fx-background-radius: 10px;
}
Now, select your
Button and have a look at the CSS Analyzer. As you can see, the
Button is inheriting the css rule (since the Button is a child of the
AnchorPane), and still have its inline Style. The Inline style “win”,
since it has precedence on the stylesheet. The CSS Analyzer columns
are displayed by precedence order.
Note the small right-arrow
icons, that allow to jump to the source of the value (either
test.css, or the inspector in this case).
Of course, unless you
want to set a specific background radius for this particular Button,
you can remove the inline Style from the inspector.
Changing the color of a TitledPane arrow
In some cases, it can be useful to be able to select the inner element you want to style directly from the Content View .
Drop a TitledPane to the Content View. Then select from the CSS Analyzer the CSS cursor (the other cursor on the left allow you to come back to ‘standard’ selection), that will allow to select an inner element:
height: 62px;" align="LEFT" border="0">
… and select the TitledPane arrow, that will get a yellow background:
… and the Styleable Path is updated:
To define a new css rule, you can first copy the Styleable path :
.titled-pane:expanded
.title .arrow-button .arrow {
-fx-background-color : red;
}
As soon as the
test.css is saved, the change is taken into account in Scene Builder.
You can also use the Styleable Path to discover all the inner elements of TitledPane, by clicking on the arrow icon:
More details
You can see the CSS Analyzer in action (and many other features) from the Java One BOF:
presented by my colleague Jean-Francois Denise.
On the right hand, click on the Media link to go to the video (streaming) of the presa.
The Scene Builder support of CSS starts at 9:20
The CSS Analyzer presentation starts at 12:50