JavaFX往BorderPane添加ImageView数组元素报重复子节点错误原因?
错误原因分析
- JavaFX中所有UI组件都属于
Node子类,同一个Node实例只能被添加到父容器一次,也不能同时归属多个父容器,这是JavaFX场景图的核心规则。 - 你的代码仅实例化了1个
ImageView对象:
此时数组两个下标指向完全相同的对象实例,后续两次调用ImageView img = new ImageView(new Image("sample.png")); array[0] = img; array[1] = img;add方法相当于重复添加同一个节点到BorderPane,直接触发了你遇到的IllegalArgumentException异常。
修复方案
如果需要显示两张相同的图片,只需创建两个独立的ImageView实例即可,底层的Image资源对象可以被多个ImageView共享,不会额外占用内存:
// 复用同一份图片资源 Image image = new Image("sample.png"); // 创建两个独立的ImageView实例 array[0] = new ImageView(image); array[1] = new ImageView(image); // 再分别添加到父容器就不会报错 root.getChildren().add(array[0]); root.getChildren().add(array[1]);
内容的提问来源于stack exchange,提问作者tommY
相关产品推荐
相关产品推荐

