如何在动态用户界面中访问GUI元素

时间:2017-04-02 07:02:51

标签: button javafx

我正在尝试开发动态用户界面。当用户点击某个指示符时,它的图形与一些操作按钮一起被实例化。有关示例,请参见图像。该图表在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 ***/

任何帮助将不胜感激。我有点坚持这个。

Example of dynamic interface

1 个答案:

答案 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);