我目前用JavaFX制作了一个表单。我总是按一个按钮,我调用“addAnswer()”-方法。在其中,我创建了一个RadioButton、一个Label和一个deleteButton,我将它们捆绑在一个HBox中。我把所有的HBox都装在一个vBox中。现在的问题是删除按钮。我想深入研究点击按钮的HBox。
这是我的代码:
public void addAnswer() {
this.rB = new RadioButton();
checkAnswer.getToggles().add(rB);
hBox = new HBox();
tF = new TextField();
delAnswer = new Button("Löschen");
delAnswer.setId(Integer.toString(counter));
hBox.getChildren().addAll(rB, tF, delAnswer);
hBox.setId(Integer.toString(counter));
delAnswer.setOnAction(e -> delAnswer(Integer.parseInt(hBox.getId())));
System.out.println(delAnswer.getId());
vBox.getChildren().addAll(hBox);
counter++;
}
public void delAnswer(int e){
vBox.getChildren().remove(delAnswer.getId());
}
我在上面试过这个,但我意识到,所有的delAnswers-Button都有相同的ID:我按下添加按钮的频率。有没有什么解决方案可以让我选择我用动态方式按下的那个?因为我不知道有人多久会按下或删除一些东西。
谢谢
我认为您的问题是,您将相同的事件分配给所有按钮,首先创建一个存储按钮的列表,然后在将ID的值影响到某个项目后将其递增:
List<Button> buttons = new ArrayList<>();
/*
Create Button and call IDEvt method to create new event
for each button
*/
private void IDEvt(Button btn){
btn.setId(String.valueOf(IDRank));
btn.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println(btn.getId());
}
});
IDRank++;
}
hbox
是一个字段,这就是为什么总是使用最后添加的hbox
。(hBox
在执行lambda主体时计算,而不是在创建lambda时计算)。如果您使用(有效地)最终
局部变量,这将有所不同:
final HBox hBoxLocal = hBox;
delAnswer.setOnAction(e -> delAnswer(Integer.parseInt(hBoxLocal.getId())));
但是,我想提出一个不同的解决方案,允许您使用相同的事件处理程序
您可以使用
getSource
获取触发事件的Node
。从这个Node
您可以获得父级,即HBox
。您可以使用删除(Object)
方法从VBox
中删除它
delAnswer.setOnAction(e -> {
// get button
Node source = (Node) e.getSource();
// remove parent of button from VBox
vBox.getChildren().remove(source.getParent());
});
我有一个按钮和一个文本框。当我在textbox中放置一个值并单击此按钮时,将创建一个新按钮,该值填充在textbox中,但我希望当我再次单击Button1时,应该还有一个按钮,或者我们可以说如何移动上一个按钮的位置? 请帮我解决这个问题。提前谢了。
本文向大家介绍javafx 创建一个按钮,包括了javafx 创建一个按钮的使用技巧和注意事项,需要的朋友参考一下 示例 创建aButton很简单: 这将创建一个新的Button,内部没有任何文本或图形。 如果要Button使用文本创建一个,只需使用带有Stringas参数的构造函数(用于设置textProperty的Button): 如果您想创建一个Button内部带有图形或其他图形的Node,
从这段代码中,当单击“button1”时,它应该创建一个新按钮“btn”,当单击“btn”时,它应该转到其click函数中的url(即btn_Click())。但是当我单击“button1”时,它不执行“button1_click()”,而是执行“btn_click()”。我该怎么办??
问题内容: 首先,我很抱歉如果这个答案已经在这里,因为我已经搜索了几个星期,还没有找到任何东西。 我正在开发一个Android应用,该应用需要允许用户创建和删除按钮。我知道如何通过将按钮添加到XML文件并在JAVA文件中创建其功能来正常静态地创建按钮。 相反,我有一个静态按钮,我将其称为“创建按钮”。当用户按下“创建按钮”时,应该给他们选择向当前活动添加新按钮的选项,允许他们更改该按钮的标题等。他
我动态创建了按钮。 我知道用以下代码单击了哪个按钮; 然而,在这种情况下,我无法知道按钮的名称。因为按钮的名字可以是任何东西。我怎么知道按下了哪个按钮?提前感谢!
我一直在经历一些怪异的行为。我正在尝试编写一个简单的GUI来帮助我与我的大学项目进行交互,所以我没有使用FXML。到目前为止,JavaFX的一切工作都很好--我可以创建场景、画布等,但当我试图创建一个按钮时,它会抛出一个错误。即使这是我唯一想做的事情,即: 这是我得到的错误: 应用程序启动方法java.lang.Reflect.InvocationTargetException位于java.bas