Is there a way to remove the default space (padding/margin) that JavaFX label adds? I want to get rid of the space displayed between the black lines on the image below:
For me it was easiest to just use setPadding.
label.setPadding(new Insets(-2,0,0,0)); //top, right, bottom, left
This way I did not have to deal with the css-style sheet.
You can achieve that by adding -fx-padding: -10 0 0 0;
to the list of your styles.
For more flexible solution you can use FontMetrics
information:
FontMetrics metrics = Toolkit.getToolkit().getFontLoader().getFontMetrics(label.getFont());
label.setPadding(new Insets(-metrics.getDescent(), 0, 0, 0));
NB: You need to call that code after scene.show()
. Before that graphics engine is not ready to provide correct metrics.
One of the more dynamic ways to do this is to use a Text
instead of a Label and set the boundsType
as VISUAL
. This results in a Text without any padding on the any of the sides of the Text, irrespective of the font size.
Text text = new Text();
text.setBoundsType(TextBoundsType.VISUAL);
For more details see my post here Substructure styling
You could also do it like this after the stage.show().
With the example of an separator:
Separator separator = new Separator();
separator.setStyle(""
+ "-fx-border-width: 1px;"
+ "-fx-border-color: black;"
+ "-fx-padding: 0px;"
+ "");
stage.show()
Do
Node line = separator.lookup(".line");
line.setStyle(""
+ "-fx-border-insets: 0px;"
+ "-fx-border-width: 0px;"
+ "");
or this way index 0 because it has only one element at index 0 which is an Region with style calss .line
separator.getChildrenUnmodifiable().get(0).setStyle(""
+ "-fx-border-insets: 0px;"
+ "-fx-border-width: 0px;"
+ "");