我有一个 GridPane,其中标签和文本字段交替显示(标签、文本字段、标签、文本字段)。标签的宽度可以是任意的,并且永远不会提前知道。我需要确保标签始终完全可见,这意味着它们不会被截断(...),并且只有 TextField 会缩小。这是我的代码:
public class NewMain extends Application {
@Override
public void start(Stage stage) {
GridPane gridPane = new GridPane();
gridPane.setHgap(10);
gridPane.setVgap(10);
gridPane.setPadding(new Insets(10));
Label label1 = new Label("Label AAAAA BBBBB:");
label1.setMinWidth(Region.USE_COMPUTED_SIZE);
TextField textField1 = new TextField();
textField1.setMinWidth(10);
GridPane.setHgrow(textField1, Priority.ALWAYS);
Label label2 = new Label("Label CCCCCC DDDDDD:");
label2.setMinWidth(Region.USE_COMPUTED_SIZE);
TextField textField2 = new TextField();
GridPane.setHgrow(textField2, Priority.ALWAYS);
textField2.setMinWidth(10);
gridPane.add(label1, 0, 0);
gridPane.add(textField1, 1, 0);
gridPane.add(label2, 2, 0);
gridPane.add(textField2, 3, 0);
ColumnConstraints labelColumn = new ColumnConstraints();
labelColumn.setHgrow(Priority.NEVER);
ColumnConstraints textFieldColumn = new ColumnConstraints();
textFieldColumn.setMinWidth(50);
textFieldColumn.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().addAll(
labelColumn, textFieldColumn,
labelColumn, textFieldColumn
);
Scene scene = new Scene(gridPane, 600, 100);
stage.setTitle("GridPane Single Row Test");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
结果如下:
有人能告诉我该怎么做吗?
标签的计算尺寸考虑到了它可以被截断的事实。首选尺寸将为您提供它“想要”的尺寸,并且它不希望被截断。只需将最小宽度设置为
Region.USE_PREF_SIZE
: