我正在尝试开发动态用户界面。当用户点击某个指示符时,它的图形与一些操作按钮一起被实例化。有关示例,请参见图像。该图表在HBox中与按钮一起创建,然后添加到VBox中。我无法解决的问题是:当单击一个按钮时,如何访问相应的元素?
问题简单归结为:
Button buttonRemove = new Button ();
buttonRemove.setMinWidth (80);
buttonRemove.setText ("Remove");
buttonMap.getProperties ().put ("--IndicatorRemoveButton", indicator.getName ());
buttonRemove.setOnAction (e -> buttonRemoveClick ());
private Object buttonRemoveClick ()
{
// Which button clicked me??
return null;
} /*** buttonRemoveClick ***/
任何帮助将不胜感激。我有点坚持这个。
答案 0 :(得分:1)
可以将参数传递给lambda中的buttonRemoveClick
方法,只要它是有效的final或参数。
private void buttonRemoveClick (HBox group) {...}
buttonRemove.setOnAction (e -> buttonRemoveClick (theGroup));
在这种情况下,您还可以传递ActionEvent
并获取源代码以检索Button
;这可能不足以删除元素,但为此你可以遍历父母,直到你到达HBox
的孩子
private void buttonRemoveClick (ActionEvent event) {
Node currentNode = (Node) event.getSource(); // this is the button
// traverse to HBox of container
Node p;
while ((p = currentNode.getParent()) != containerVBox) {
currentNode = p;
}
// remove part including the Button from container
containerVBox.getChildren().remove(currentNode);
}
buttonRemove.setOnAction (this::buttonRemoveClick);