从JavaFX Label中删除填充/边距

时间:2015-12-18 16:23:09

标签: java css javafx javafx-2 javafx-8

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

enter image description here

源代码:

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();
    }
}

4 个答案:

答案 0 :(得分:6)

执行此操作的一种更动态的方法是使用ap_config_file *fl; apr_pool_t *pl; location = "location of your file"; apr_pool_create(&pl,NULL); if(ap_pcfg_openfile(&fl,pl,location)==APR_SUCCESS){ /* do your stuff here */ } 代替标签,并将Text设置为boundsType。无论字体大小如何,这都会导致Text在文本的任何一面都没有任何填充。

VISUAL

答案 1 :(得分:5)

您可以通过将-fx-padding: -10 0 0 0;添加到样式列表中来实现这一目标。

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

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

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

答案 2 :(得分:0)

有关更多详细信息,请在这里Substructure styling

查看我的帖子

您也可以在 stage.show()之后执行此操作。

以分隔符为例:

Separator separator = new Separator();
separator.setStyle(""
    + "-fx-border-width: 1px;"
    + "-fx-border-color: black;"
    + "-fx-padding: 0px;"
    + "");

stage.show()

Node line = separator.lookup(".line");
line.setStyle(""
    + "-fx-border-insets: 0px;"
    + "-fx-border-width: 0px;"
    + "");

或以这种方式编制索引 0 ,因为它在索引0处只有一个元素,该元素是具有样式校准 .line

的Region
separator.getChildrenUnmodifiable().get(0).setStyle(""
    + "-fx-border-insets: 0px;"
    + "-fx-border-width: 0px;"
    + "");

答案 3 :(得分:0)

对我来说,最简单的方法是使用 setPadding

label.setPadding(new Insets(-2,0,0,0)); //top, right, bottom, left

这样,我不必处理CSS样式表。