我有一个网格窗格,其中包含许多按钮(通常介于10到25之间),每行有五个按钮(但最后一行中有许多按钮)。程序执行期间按钮的数量(以及按钮本身)可能会发生变化。发生这种情况时,应显示新按钮。我怎样才能做到这一点?这是一个小例子:
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='commands')
create_parser = subparsers.add_parser('create', help='Create a directory')
path_subparser = create_parser.add_subparsers()
path_parser = path_subparser.add_parser('path', help='path')
path_parser.add_argument('path', action='store', help='path')
或者使用public class GridButtons extends Application {
List<String> buttonTexts = new ArrayList<>();
GridPane buttonGrid = new GridPane();
GridPane bgGrid = new GridPane();
@Override
public void start(Stage primaryStage) {
Button changeButtonsButton = new Button("Change BTNs");
changeButtonsButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
changeButtonTexts();
}
});
bgGrid.add(changeButtonsButton, 0, 0);
changeButtonTexts();
bgGrid.add(buttonGrid, 1, 0);
Scene scene = new Scene(bgGrid, 440, 140);
primaryStage.setScene(scene);
primaryStage.show();
}
public void updateButtonsGrid() {
buttonGrid = new GridPane();
for (int i = 0; i < buttonTexts.size(); i++) {
Button button = new Button(buttonTexts.get(i));
button.setMinWidth(70);
button.setMaxWidth(70);
buttonGrid.add(button, i % 5, i / 5);
System.out.println(buttonTexts.get(i));
}
// now the new GridPane should be displayed -> how?
}
public void changeButtonTexts() {
buttonTexts.clear();
Random random = new Random();
int buttonCount = random.nextInt(15) + 10;
for (int i = 0; i < buttonCount; i++) {
buttonTexts.add("Button " + i);
}
updateButtonsGrid();
}
public static void main(String[] args) {
launch(args);
}
}
有更好的选择吗?使用GridPane
和ListView<Button>
会有效,但按钮不会以表格形式显示,每行有五个按钮。
答案 0 :(得分:3)
创建一个新的GridPane
可能不是你想要的。在函数updateButtonsGrid
中,更改行
buttonGrid = new GridPane();
到
buttonGrid.getChildren().clear();
如果由于某种原因,您完全确定需要GridPane
的新实例,请从bgGrid
中删除旧实例,然后添加新实例。在您当前的代码示例中,GridPane
的新实例永远不会添加到场景图中。