2 回答
TA贡献1820条经验 获得超10个赞
private Scene assets(Stage primaryStage){
Scene assets;
GridPane gp = new GridPane();
gp.setVgap(0);
//gp.setPadding(new Insets(25, 0, 25, 25));
Text title = new Text("Assets");
title.setFont(Font.font("Arial", FontWeight.BOLD, 14));
gp.add(title, 0, 0);
Text description = new Text("Please select all assets you would like to include in your budget");
gp.add(description, 0, 1);
String [] optionsString = new String []{"A", "B", "C", "D", "E", "F"};
HBox checkboxContainer = new HBox();
checkboxContainer.setPadding(new Insets(5, 5, 5, 5));
checkboxContainer.setSpacing(20);
for (int i = 0; i < optionsString.length; i++) {
final int column = i;
final int row = i;
String option = optionsString[i];
CheckBox checkBox = new CheckBox(option);
ChoiceBox<Integer> choice = new ChoiceBox<>();
Label label = new Label("How many " + optionsString[i] + " options do you have?");
choice.getItems().addAll(1, 2, 3, 4, 5);
HBox choiceContainer = new HBox(label, choice);
checkBox.selectedProperty().addListener((o, oldValue, newValue) -> {
if (newValue) {
gp.add(choiceContainer, 0, row + 4);
} else {
gp.getChildren().remove(choiceContainer);
}
});
checkboxContainer.getChildren().add(checkBox);
}
gp.add(checkboxContainer, 0, 2);
assets = new Scene (gp, 1280, 720);
return assets;
}
CheckboxContainer 必须在 for 循环之外。
TA贡献1827条经验 获得超4个赞
您无意中将第 0 列(第一列)的宽度设置为文本的宽度,“请全选……等等”。
这是因为 GridPane 使用列的最大元素的首选宽度作为该列的宽度。
您可能希望从 GridPane 中删除文本并将其作为 HBox 或 VBox 的一部分,而 GridPane 也是其中的一个元素。感觉这是最自然的解决方案。
要么是那样,要么你将不得不在文本元素的跨度上胡闹,所以 GridPane 认为它应该跨多个列。
GridPanes 最适合自然地可以被认为是网格的数据,其中每列的数据宽度相似。那不是你所拥有的。
然而,您可以强制 GridPane 通过一点点反复试验来做几乎任何事情。
添加回答
举报