Javafx 如何在显示阶段之前使用.lookUp()(或在显示阶段之后使用它)

Javafx 如何在显示阶段之前使用.lookUp()(或在显示阶段之后使用它),javafx,Javafx,我想使用.lookup(),以便在单击TextArea的内容时可以创建事件,但在使用TextArea.lookup(“.content”)时会得到null。在搜索了原因之后,我发现如果在stage.show()之前调用它,它将返回null。我的下一个反应是以某种方式检查一个事件,该事件在舞台出现后即被播放,但该事件只有在您可以访问舞台本身的情况下才可访问,在本例中,我没有这样做。我还能做什么?不要在内容节点注册处理程序。让TextArea自行处理内容节点的创建,直接在TextArea注册一个事件

我想使用.lookup(),以便在单击TextArea的内容时可以创建事件,但在使用TextArea.lookup(“.content”)时会得到null。在搜索了原因之后,我发现如果在stage.show()之前调用它,它将返回null。我的下一个反应是以某种方式检查一个事件,该事件在舞台出现后即被播放,但该事件只有在您可以访问舞台本身的情况下才可访问,在本例中,我没有这样做。我还能做什么?

不要在内容节点注册处理程序。让
TextArea
自行处理内容节点的创建,直接在
TextArea
注册一个事件处理程序,并使用事件的
pickResult
来确定单击是否发生在具有样式类
content
的节点内

textArea.setOnMouseClicked(evt -> {
    Node n = evt.getPickResult().getIntersectedNode();
    while (n != textArea) {
        if (n.getStyleClass().contains("content")) {
            // do something with content node
            System.out.println("content: " + n);
            break;
        }
        n = n.getParent();
    }
});

在节点上生成布局过程:

node.applyCss();
node.layout();
根据对以下问题的答复中的定义:


在此之后,节点上的查找函数应按预期工作。

我的建议是为
stage.setOnShown()
设置一个处理程序,该处理程序调用一个类中的某些方法,调用另一个类中的某个方法,这将一直持续下去,直到您到达包含
TextArea
的类,该类将调用查找。您还可以向
TextArea
添加一个宽度/高度属性侦听器,因为当舞台显示时,这些侦听器会更改,但如果文本区域大小发生任何更改,这种方法将导致问题。@BlakeOrdway Yeah。。。我认为这不会通过我的代码审查。