Css 在GridPane(JavaFX)中用点填充/填充两个标签之间的空间 起点: 两列网格窗格 每列都有一个标签

Css 在GridPane(JavaFX)中用点填充/填充两个标签之间的空间 起点: 两列网格窗格 每列都有一个标签,css,javafx,label,padding,gridpane,Css,Javafx,Label,Padding,Gridpane,希望有输出: 由点填充的标签之间的空间 到目前为止,我只遇到组合字符串的目标长度已知的字符串解决方案。但这种情况对我来说并不适用,因为我需要一种解决方案,它也可以在屏幕大小改变时工作,因此标签之间的空间会动态变化。你们能给我指一下正确的方向吗?你们可以把2个标签s放在HBox中,中间有一个区域,分别将标签的hgrow和区域的设置为NEVER和ALWAYS,并使用线性渐变作为区域的背景,该区域将其大小的一半绘制为黑色,另一半绘制为透明 例子 您也可以在区域上使用边框(仅顶部),而不是使用背


希望有输出:
  • 由点填充的标签之间的空间


到目前为止,我只遇到组合字符串的目标长度已知的字符串解决方案。但这种情况对我来说并不适用,因为我需要一种解决方案,它也可以在屏幕大小改变时工作,因此标签之间的空间会动态变化。你们能给我指一下正确的方向吗?

你们可以把2个
标签
s放在
HBox
中,中间有一个
区域
,分别将标签的
hgrow
区域的
设置为
NEVER
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();
}