我目前正在开始使用javafx 8,并在一个简单的解决方案中提出了以下问题:
我有不同的控件(Button),它们会出现
Pane)Pane)
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
Run Code Online (Sandbox Code Playgroud)
现在似乎发生了最后一个.addAll(),删除了另一个框中的引用.
BorderPane root = new BorderPane();
root.setCenter(vbox);
root.setBottom(hbox);
Run Code Online (Sandbox Code Playgroud)
输出:

我尝试(测试)只是重复使用一个按钮,但是:
root.setCenter(one);
root.setBottom(one);
Run Code Online (Sandbox Code Playgroud)
结果是
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
Run Code Online (Sandbox Code Playgroud)
这让我想到了以下问题:
HBox和VBox节点会发生什么?正如在Node类的JavaDocs中所说:
场景图中的任何位置最多可出现一次节点.具体而言,节点必须出现不超过一次在所有以下的:作为一个根节点
Scene,孩子ObservableList的Parent,或作为一个剪辑Node.如果程序将子节点添加到
Parent(包括Group,Region等等)并且该节点已经是不同的子节点Parent或者根节点Scene,则该节点将自动(并静默地)从其父节点中删除.
因此,你无法做你想做的事情.一个按钮只能显示一次,两个地方不能有相同的按钮.为了使这更清楚 - getParent()如果你能够在两个地方拥有相同的实例,那么该方法应该返回什么?没什么,这是不可能的.一个实例只能存在于一个地方.
如果要重复使用,则必须复制该按钮.
| 归档时间: |
|
| 查看次数: |
1159 次 |
| 最近记录: |