在javaFX中需要对象引用鼠标光标下的节点

时间:2014-10-02 04:31:30

标签: javafx mouseevent

我需要在javaFX窗格(或ScrollPane)中引用鼠标光标下的对象 以下代码从窗格中删除光标下的节点。

节点对象存储在ArrayList中,并具有唯一的id。如果我有一个对节点对象的引用,那么将它从列表中删除将是一件简单的事情。我很高兴能够从MouseEvent的目标描述提供的目标描述中提取节点对象的id,并使用它来查找列表中的节点。注意:我正在动态创建这些节点,它们是无名的:myList.add(new TYPE())。

这是我用来移除窗格中节点的片段;

root.setOnMouseClicked(new EventHandler<MouseEvent>() {
    @Override
    public void handle (MouseEvent me) {
        // would like a line here that grabbed the reference to the target
        pane.getChildren().remove(me.getTarget());

    }
});

2 个答案:

答案 0 :(得分:1)

最好将setOnMouseClicked侦听器放到要从列表中删除的节点上。

List<Node> listOfNodes = new ArrayList();
Node node = new Node();
listOfNodes.add(node);
node.setOnMouseClicked((event) -> {
    listOfNodes.remove(node);
});

注意:最好使用ObservableList而不是普通的ArrayList,尤其是如果您希望从根窗格中删除该节点。

答案 1 :(得分:0)

致James_D:不相信的理由:未能通过编译器的语法是包含表达式me.getTarget()。getText()的语句,该表达式被注释掉了。在我看来,这应该有效。

for (Text tl : textList)
   if ( (me.getTarget()) == (tl) )
       {
          System.out.println("HuRah!");
          System.out.println("text is " + tl.getText());
          //System.out.println("text is " + me.getTarget().getText());
          textList.remove(me.getTarget());                   
        }