gpt4 book ai didi

java - 我如何在 javafx 8 中多次使用一个控件?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:54:59 25 4
gpt4 key购买 nike

我目前正在开始使用 javafx 8,并在一个简单的解决方案中提出了以下问题:

我有不同的控件(Button),它们应该出现

  1. 在主要内容中( Pane 中心)
  2. 在页脚中( Pane 底部)

concept

Button one = new Button("1");
Button two = new Button("2");
Button three = new Button("3");

VBox vbox = new VBox();
vbox.getChildren().addAll(one, two, three);

HBox hbox = new HBox();
hbox.getChildren().addAll(two, three); //To clarify my problem i leave one node in vbox

现在似乎发生了最后一个 .addAll()删除 另一个框中的引用。

BorderPane root = new BorderPane();
root.setCenter(vbox);
root.setBottom(hbox);

输出:

gui

我尝试(为了测试)简单地重用一个按钮,但是:

root.setCenter(one);
root.setBottom(one);

结果

java.lang.reflect.InvocationTargetException
...
Caused by: java.lang.RuntimeException: Exception in Application start method
...
Caused by: java.lang.IllegalArgumentException: Children: duplicate children added: parent = BorderPane@1784a61

这让我思考了以下问题:

  • 除了创建新的按钮实例之外,是否有解决该问题的方法?
  • HBoxVBox 节点发生了什么
  • 为什么控件不能重复使用?

最佳答案

Node 的 JavaDocs 中所述类:

A node may occur at most once anywhere in the scene graph. Specifically, a node must appear no more than once in all of the following: as the root node of a Scene, the children ObservableList of a Parent, or as the clip of a Node.

If a program adds a child node to a Parent (including Group, Region, etc.) and that node is already a child of a different Parent or the root of a Scene, the node is automatically (and silently) removed from its former parent.

因此,您不能做您想做的事。一个按钮只能显示一次,你不能在两个地方有相同的按钮。为了使这一点更清楚 - 例如应该是什么getParent() 方法返回如果你能够在两个地方有相同的实例?没什么,这不可能。一个实例只能存在于一个地方。

如果要重复使用该按钮,则必须复制该按钮。

关于java - 我如何在 javafx 8 中多次使用一个控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29537491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com