使用JavaFX中的新按钮动态更新GridPane - >怎么重画?

时间:2015-12-21 13:47:47

标签: java javafx

我有一个网格窗格,其中包含许多按钮(通常介于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); } } 有更好的选择吗?使用GridPaneListView<Button>会有效,但按钮不会以表格形式显示,每行有五个按钮。

1 个答案:

答案 0 :(得分:3)

创建一个新的GridPane可能不是你想要的。在函数updateButtonsGrid中,更改行

buttonGrid = new GridPane();

buttonGrid.getChildren().clear();

如果由于某种原因,您完全确定需要GridPane的新实例,请从bgGrid中删除旧实例,然后添加新实例。在您当前的代码示例中,GridPane的新实例永远不会添加到场景图中。