【问题标题】:How to call a button on button click recursively?如何递归地调用按钮单击按钮?
【发布时间】:2019-02-08 10:41:15
【问题描述】:

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

我在 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);

}

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

【问题讨论】:

  • 只有上一个按钮应该添加一个按钮? listButton 数组的用途是什么?
  • 是的,只有最后一个添加的按钮应该调用下一个(意味着第二个按钮调用第三个按钮,第三个调用第四个按钮等等)......我试图排列多个按钮跨度>

标签: java recursion button javafx


【解决方案1】:

只有最后一个添加的按钮应该调用下一个(意味着第二个按钮调用第三个按钮,第三个调用到第四个等等)...

假设您使用 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/a 值的异常子列表,除非您将数组大小设置为 1,这允许您进行一次调用。当然,如果其他代码需要您这样做,您可以将这些 Buttons 保存在一个列表中。

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

@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);
}

【讨论】:

  • 它的神奇解决方案!两者都能满足我的要求。对你这样的帮助无话可说。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多