如何将所点击的节点归因于哪个对象(在ArrayList中)?

时间:2016-11-05 23:24:37

标签: java class user-interface arraylist javafx

我正在制作一个JavaFX表单程序。表单数据使用Pages的ArrayList处理,这是节点的ArrayLists,它们是包含GUI元素(标签)的对象及其数据成员。
像这样:

主要声明

private final ArrayList<ArrayList<FormNode>> form = new ArrayList<>(); 
private final ArrayList<FormNode> page = new ArrayList<>(); 
int currentNode = 0;  //index of currently active node

对象类

public class FormNode {

    private String nodeName;
    private boolean visible;
    private boolean editable;
    private Label nodeGUI;

    //Constructor...Sets...Gets...Methods

}

初始化节点时,会将其添加到窗格并通过单独的类分配事件处理程序。我要做的是让程序通过单击与之关联的节点来通信哪个对象处于活动状态,因此可以将其标记为活动节点。

像这样的东西(不是我的实际代码,只是我需要的伪代码):

用户点击GUI中所需的标签(节点),该标签调用...

nodeGUI.setOnMousePressed(new EventHandler<MouseEvent>() {
    @Override public int handle(MouseEvent mouseEvent) {

      --- call a method to assign the value ---
        currentNode = thisNodesIndex;


    }
  });

我们的想法是在嵌套页面ArrayList中返回FormNode对象的索引,以赋予currentNode该值。

现在一切正常,但访问索引是麻烦。从Label本身(x,y,height,width等)访问数据,但我需要将其识别为对象的成员,以便我可以操纵其他属性。 (即nodeNamevisible等。)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我不知道如果我真的明白你在问什么,但试试这个。

@Override
public void handle(Event evt) {
   System.out.println(((Control)evt.getSource()).getId());
}

在你的情况下:

nodeGUI.setOnMousePressed(new EventHandler<MouseEvent>() {
    @Override
    public int handle(MouseEvent mouseEvent) {
        //--- call a method to assign the value ---
        currentNode = thisNodesIndex;
        System.out.println(((Control)mouseEvent.getSource()).getId());
    }
});