到目前为止,我只遇到了String解决方案,其中已知组合String的目标长度。但是这种情况并不适合我,因为我需要一个解决方案,当屏幕尺寸发生变化时也能正常工作,因此标签之间的空间会动态变化。你们能指点我正确的方向吗?
答案 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
。这将允许你实际使用点而不是笔画,但由于你的图片显示笔画,我发布了背景方法而不是......