如何调用按钮上的按钮递归单击?

时间:2019-02-08 10:41:15

标签: java recursion button javafx

如何无限次或动态地单击按钮来添加新的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);

}

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

1 个答案:

答案 0 :(得分:3)

  

只有最后添加的按钮才能调用下一个按钮(意味着第二个按钮调用第三个按钮,第三个按钮向前调用,依此类推)...

假设您使用方法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);
}
相关问题