当前位置: 首页 > 知识库问答 >
问题:

JavaFX:节点丢失了它的父节点

阴迪
2023-03-14
  1. 我有一个具有必要字段的窗格扩展类。它将是“大门”。
  2. 调用控制器从FXML加载节点树,并将其作为子级附加到“gate”对象
  3. 然后创建并显示一个以“gate”为根节点的新场景。
  4. 新的窗口控制器有一个对FXML根节点(“gate”的直接子节点)的引用,他所需要做的就是在其上使用.getparent()来获取“gate”。

但管他呢!它返回null!我做错了什么?我应该通过FXMLLoader设置一个不同的控制器吗?

组织从一个控制器到另一个控制器的消息流的正确方法是什么?

private void handleMenuVisibility(ActionEvent event) throws IOException
{
    Parent root = FXMLLoader.load(getClass().getResource("/ContextMenus/Visibility.fxml"));
    final AttributedWrapper aw = new AttributedWrapper();
    aw.getChildren().add(root);
    Scene scene = new Scene(aw);
    Stage stage = new Stage();
    stage.setScene(scene);
    stage.show();
}
public void initialize(URL url, ResourceBundle rb) {
AttributedWrapper aw = (AttributedWrapper) anchorPane.getParent();
}

主要UPD:在这里找到了一些信息:如何将在FXML Controller1中创建的对象传递到内部FXML控件的Controller2我使用我的attributedWrapper作为FXML文件的根节点,一般来说它是有效的。但是问题仍然存在于调用的控制器初始化中。我从主应用程序控制器发送到被调用的参数是不可用的。功能

    public void initialize(URL url, ResourceBundle rb)

在执行fxmlloader.load()时和将数据放入包装器之前准确地启动。

以下是要点:主应用程序

final AttributedWrapper aw = FXMLLoader.load(getClass().getResource("/ContextMenus/Visibility.fxml"));
Scene scene = new Scene(aw);
Stage stage = new Stage();
stage.setScene(scene);
    aw.writeParam("key1", "value1");
    stage.show()
@FXML private AttributedWrapper aw;
public void initialize(URL url, ResourceBundle rb) {
System.out.println(aw.readParam("key1"));
anchorPane.writeParam("key2", "value2");
}

共有1个答案

邵宏达
2023-03-14

问题是在FXMLLoader调用期间调用方法public void initialize(URL URL,ResourceBundle rb)

Parent root = FXMLLoader.load(getClass().getResource("/ContextMenus/Visibility.fxml"));

因此,你的父母还没有确定。

有几种方法可以解决这个问题:

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/ContextMenus/Visibility.fxml"));
Parent root = fxmlLoader.load();
controller = (MyController) fxmlLoader.getController();
final AttributedWrapper aw = new AttributedWrapper();
aw.getChildren().add(root);
controller.doMyInit();
root.parentProperty().addListener(new ChangeListener<Parent>() {

    @Override
    public void changed(ObservableValue<? extends Parent> ov, Parent oldP, Parent newP) {
        if (newP != null && oldP == null) {
            System.out.println("my parent is " + newP);
        }
    }
});
 类似资料:
  • 我创建了一个简单的应用程序来模拟JAVAFX的动态节点创建。这个应用程序能够通过单击“新建”按钮在用户需要的时候创建一个新窗口。用户可以通过单击“添加任务”按钮,然后单击对话框窗口上的“添加”按钮,将标题窗格的新节点添加到窗口中。 我想修复一个意外行为。此应用程序仅将新节点(在本例中为TitledPane)添加到最后创建的窗口。并且上一个窗口上的所有节点都将消失。 你可以看下面的视频来更好地理解我

  • 如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?

  • 问题内容: 在C#中,我发现了一种非常可爱的方法,该方法使您可以从指定控件中获取所有后代和所有THEIR后代。 我正在寻找JavaFX的类似方法。 我看到了我要使用的类,因为它是派生所有带有孩子的Node类的类。 到目前为止,这是我所拥有的(并且我还没有在Google上通过“ JavaFX从场景中获取所有节点”之类的搜索真正找到任何东西): 那么,如何确定N是否是父母(或从父母继承)呢?我说的对吗

  • 我需要将子元素复制到父元素中。 输入 期望输出 我尝试的内容(输出与输入保持相同): 我肯定会错过一些非常简单的事情。子元素与父元素具有相同的名称,这应该不是问题?

  • 问题内容: 我正在使用nltk的Tree数据结构来处理parsetree字符串。 但是,数据结构似乎受到限制。是否可以通过其字符串值获取节点,然后导航至顶部或底部? 例如,假设您要获取字符串值为 ‘nice’ 的节点,然后查看其父级,子级等是什么?可以通过nltk的Tree实现该节点吗? 问题答案: 对于NLTK 3.0,您想使用ParentedTree子类。 http://www.nltk.or

  • 我想从父节点复制到子节点。我真的不确定这是如何实现的。 我的源xml 我想得到输出为 我想要XSLT1.0中的解决方案。 我想将这些节点复制到子节点 谢谢。