1

我在我的应用程序中遇到了一个奇怪的问题。

我想在两个不同的选项卡上复制 UI(即两个不同的选项卡将在其容器中保存相同的 VBox 对象)。

我所期待的不是创建两个不同的 VBox 对象来添加到 Tab1 和 Tab2,而是创建一个 VBox 对象,用所需的内容填充它,然后将相同的对象添加到 Tab1 和 Tab2。

当前发生的情况是,如果我只将该 UI 添加到 Tab1,那么它会正确显示。但是如果我将相同的对象添加到 Tab2,那么它会从 Tab1 中消失。

下面是我正在使用的示例代码。

@FXML
private Tab tab1, tab2;

Label label=new Label("Sample");

tab1.setContent(label);
tab2.setContent(label);

我在这两个选项卡内容中的假设是什么,我将看到示例文本。

但示例文本仅显示在 Tab2 中,而不显示在 Tab1 中。(Tab1 显示为空。)

我是 Javafx 的新手,所以如果我问一个愚蠢的问题,请多多包涵:)

4

1 回答 1

5

Node是所有 JavaFX 图形元素的基类,是树结构的成员。因此,每个节点最多可以有一个parent。所以很明显,在幕后,当你把你的标签放到VBox另一个选项卡上时,JavaFX 会将它分配给另一个父级。同时将其从旧父节点中移除,以保持节点树一致。

我认为你会有更好的机会:

  1. 如果您只希望代码重用,则实现一个封装 theVBox及其子项的创建的组件。
  2. VBox忍受一次只有一个标签的事实。您将不得不听一些选项卡激活事件并VBox每次都将其分配给激活的选项卡。
于 2013-11-05T11:32:57.643 回答