如何无限次或动态地单击按钮来添加新的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);
}
但是我必须动态添加,直到用户想要添加/按下上一个按钮
答案 0 :(得分:3)
只有最后添加的按钮才能调用下一个按钮(意味着第二个按钮调用第三个按钮,第三个按钮向前调用,依此类推)...
假设您使用方法onAction
作为事件处理程序,仅从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);
}