从JavaFX Label中删除填充/边距

有没有办法删除JavaFX标签添加的默认空间(填充/边距)? 我想摆脱下图中黑线之间显示的空间:

在此处输入图像描述

源代码:

public class LabelTest extends Application { @Override public void start(final Stage primaryStage) { final Group root = new Group(); final Scene scene = new Scene(root, 300, 130, Color.WHITE); final GridPane gridpane = new GridPane(); gridpane.setPadding(new Insets(5)); gridpane.setHgap(10); gridpane.setVgap(10); final Label label = new Label("Label"); label.setStyle("-fx-font-size:44px;-fx-font-weight: bold;-fx-text-fill:#5E34B1;-fx-background-color:#ffc300;"); GridPane.setHalignment(label, HPos.CENTER); gridpane.add(label, 0, 0); root.getChildren().add(gridpane); primaryStage.setScene(scene); primaryStage.show(); } } 

您可以通过添加-fx-padding: -10 0 0 0;来实现-fx-padding: -10 0 0 0; 到您的样式列表。

要获得更灵活的解决方案,您可以使用FontMetrics信息:

 FontMetrics metrics = Toolkit.getToolkit().getFontLoader().getFontMetrics(label.getFont()); label.setPadding(new Insets(-metrics.getDescent(), 0, 0, 0)); 

注意:您需要在scene.show()之后调用该代码。 在此图形引擎尚未准备好提供正确的指标之前。

其中一种更动态的方法是使用Text而不是Label,并将boundsType设置为VISUAL 。 无论字体大小如何,这都会导致Text在文本的任何一侧没有任何填充。

 Text text = new Text(); text.setBoundsType(TextBoundsType.VISUAL);