SDS*_*SDS 5 css java javafx javafx-2 javafx-8
有没有办法删除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();
}
}
Run Code Online (Sandbox Code Playgroud)
其中一种更动态的方法是使用a Text而不是Label并设置boundsTypeas VISUAL.无论字体大小如何,这都会导致Text在文本的任何一侧都没有任何填充.
Text text = new Text();
text.setBoundsType(TextBoundsType.VISUAL);
Run Code Online (Sandbox Code Playgroud)
您可以通过添加-fx-padding: -10 0 0 0;样式列表来实现.
对于更灵活的解决方案,您可以使用FontMetrics的信息:
FontMetrics metrics = Toolkit.getToolkit().getFontLoader().getFontMetrics(label.getFont());
label.setPadding(new Insets(-metrics.getDescent(), 0, 0, 0));
Run Code Online (Sandbox Code Playgroud)
注意:你需要在之后调用该代码scene.show().之前图形引擎尚未准备好提供正确的指标.