在GridPane(JavaFX)中带有点的2个标签之间的填充/填充空间

时间:2017-09-07 14:55:14

标签: css javafx label padding gridpane

起点:

  • 带有2列的GridPane
  • 每个列都有一个标签

enter image description here

喜欢输出:

  • 由点填充的标签之间的空格

enter image description here

到目前为止,我只遇到了String解决方案,其中已知组合String的目标长度。但是这种情况并不适合我,因为我需要一个解决方案,当屏幕尺寸发生变化时也能正常工作,因此标签之间的空间会动态变化。你们能指点我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

您可以将2 Label放在HBox之间,Region位于hgrow之间,为标签设置Region,将NEVER设为{分别为{1}}和ALWAYS,并使用线性渐变作为区域的背景,该区域将其中一半的大小设为黑色,另一半为透明。

实施例

// 20 px wide horizontal gradient alternating between black and transparent with immediate color switch
private static final Paint FILL = new LinearGradient(
        0, 0,
        10, 0,
        false,
        CycleMethod.REPEAT,
        new Stop(0, Color.BLACK),
        new Stop(0.5, Color.BLACK),
        new Stop(0.5, Color.TRANSPARENT)
);

// create background for regions
private static final Background BACKGROUND = new Background(new BackgroundFill(FILL, CornerRadii.EMPTY, Insets.EMPTY));

private static void addRow(Pane parent, String s1, String s2) {
    // create labels
    Label label1 = new Label(s2);
    Label label2 = new Label('['+s2+']');

    // create filler region with "stroke width" 2
    Region filler = new Region();
    filler.setPrefHeight(2);
    filler.setBackground(BACKGROUND);

    HBox hbox = new HBox(5, label1, filler, label2);
    hbox.setAlignment(Pos.CENTER);
    HBox.setHgrow(label1, Priority.NEVER);
    HBox.setHgrow(label2, Priority.NEVER);
    HBox.setHgrow(filler, Priority.ALWAYS);
    hbox.setFillHeight(false);

    parent.getChildren().add(hbox);
}

@Override
public void start(Stage primaryStage) {
    VBox root = new VBox();
    addRow(root, "JBoss", "DOWN");
    addRow(root, "GlassFish", "UP");
    addRow(root, "verylongprocessname", "UP");

    Scene scene = new Scene(root);

    primaryStage.setScene(scene);
    primaryStage.show();
}

您还可以在Region上使用边框(仅限顶部)而不是使用背景,并且不要设置prefHeight。这将允许你实际使用点而不是笔画,但由于你的图片显示笔画,我发布了背景方法而不是......