gpt4 book ai didi

java - 如何在按钮单击时递归调用按钮?

转载 作者:行者123 更新时间:2023-12-01 19:43:11 25 4
gpt4 key购买 nike

如何在无限次或动态点击按钮时添加新的按钮?或者简单来说如何执行添加更多按钮的功能?

我在Javafx中尝试过,但它只在列表中添加了两个按钮。

@FXML
void addMoreButton(ActionEvent event) {

b[count]=new Button("+");
b[count].setOnMouseClicked(event2 -> {
count++;
b[count]=new Button("+");
list.setAll(b[count]);
vboxTest.getChildren().addAll(list);
});

list.add(b[count]);
vboxTest.getChildren().addAll(list);

}

但我必须动态添加,直到用户想要添加/按上一个按钮

最佳答案

only the last added button should call the next one (means second button call third button , and third call to forth and so on)...

假设您从使用该方法作为 onAction 事件处理程序的恰好 1 个按钮开始,您需要执行 2 件事才能正确更新场景:

  1. 使用相同的事件处理程序添加新按钮
  2. 从单击的按钮中删除事件处理程序

您可以通过访问事件源来执行此操作:

@FXML
void addMoreButton(ActionEvent event) {
Button source = (Button) event.getSource();
source.setOnAction(null); // remove event handler

Button newButton = new Button("+");
newButton.setOnAction(this::addMoreButton);

vboxTest.getChildren().add(newButton);
}

注意:我故意省略了列表/数组,因为数组限制了元素数量 (ArrayIndexOutOfBoundsException),并且应该导致包含 的异常null/子列表中已有的值,除非您将数组大小设置为 1,这允许您进行一次调用。当然,如果其他代码要求您这样做,您可以将这些 Button 保存在列表中。

不确定删除事件处理程序是否是所需的结果。还可以完成不同的操作,例如在单击后插入新按钮:

@FXML
void addMoreButton(ActionEvent event) {
Node source = (Node) event.getSource();

Button newButton = new Button("+");
newButton.setOnAction(this::addMoreButton);

vboxTest.getChildren().add(vboxTest.getChildren().indexOf(source) + 1, newButton);
}

关于java - 如何在按钮单击时递归调用按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54590653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com