0
我有一个网格窗格,其中包含一些按钮(通常在10和25之间),每行五个按钮(但是很多都留在最后一行)。程序执行期间,按钮的数量(和按钮本身)可能会改变。发生这种情况时,应该显示新的按钮。我怎样才能做到这一点?这里是一个小例子:用JavaFX中的新按钮动态更新GridPane - >如何重绘?
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>
和ObservableList<Button>
可以工作,但这些按钮不会以表格形式显示,每行有五个按钮。
为什么要创建一个新的'GridPane'而不是在场景中使用一个?这可能是你的问题... – Itai