extending CSS style in JAVAFX

I' m trying to use CSS in JAVAFX application. Is there a way in the CSS file to make use of some kind of inheritance? For example I have one style called "redline":

.redline{
    -fx-stroke:red;
    -fx-stroke-width:5px;
}

Can I create a second style "greenline":

.greenline{
    -fx-stroke:green;
}

in a way that it inherits from "redline". Say, something like:

greenline extends redline

so that the "green" lines have a strokewidth of 5px? Thanks in advance!

Upvotes: 3

Views: 1437

Answers (1)

fabian
fabian

Reputation: 82451

You need to make a make a more specific selector available. You could e.g. add a style class:

Add the style class line to all lines and then also add the red or blue style classes to the lines that should get those colors.

Example

Java Code

Line redLine = ...
redLine.getStyleClass().add("line");
Line blueLine = ...
blueLine.getStyleClass().add("line");
Line blackLine = ...
blackLine.getStyleClass().add("line");

// add color related classes
redLine.getStyleClass().add("red");
blueLine.getStyleClass().add("blue");

...

CSS

.line {
    -fx-stroke: black; /* define standard line color */
    -fx-stroke-width: 5px;
}

.line.blue { /* rules for nodes that have style classes line AND blue */
    -fx-stroke: blue;
}

.line.red { /* rules for nodes that have style classes line AND red */
    -fx-stroke: red;
}

In CSS more specific rules will always overwrite properties of less specific rules. In this case .line is less specific than .line.blue and .line.red since the former selector contains only a single class instead of 2.


Note: There is inheritance in CSS, but properties are inherited from the parent in the scene, not from the base class in the java code.

Upvotes: 3

Related Questions