【问题标题】:How can I communicate which object (within an ArrayList) a clicked node is attributed?如何传达单击的节点归属于哪个对象(在 ArrayList 中)?
【发布时间】:2016-11-05 23:24:36
【问题描述】:

我正在制作一个 JavaFX 表单程序。表单数据使用 ArrayList of Pages 来处理,它们是节点的 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那个值。

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

有什么想法吗?

【问题讨论】:

    标签: java class user-interface arraylist javafx


    【解决方案1】:

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

    @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());
        }
    });
    

    【讨论】:

    • 对不起,如果我不清楚。我想我基本上是在问如何做事有点倒退。当有人可能通过访问特定索引中的数组列表来访问数组列表中对象的变量或属性时,我想知道某个属性源自哪个对象(在哪个索引处)。在这种情况下,是 gui 中的一个节点(按钮、标签等)。如果我点击它,我想得到它所在的对象。所以,如果我点击创建的第三个标签,我可以告诉它是 form.get(3) 对象中包含的标签。我希望得到 3 的退货。
    • 我会试试你的建议,看看是不是我想要的。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多