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;"
+ "");