如何调用按钮点击递归按钮?

问题描述 投票:0回答:1

我怎样才能在点击一个按钮的次数无限的或动态的号码添加新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);

}

但我直到用户要添加/按后退按钮动态地添加

java recursion button javafx
1个回答
3
投票

只有最后添加的按钮应该叫下一个(指第二个按钮调用第三个按钮,并提出等第三呼叫)...

假设你使用的方法onAction事件处理程序正好1键启动,你需要做两件事情正确更新的情景:

  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);
}
© www.soinside.com 2019 - 2024. All rights reserved.