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