JavaFX:getChildren().addAll() 参数不适用

时间:2021-02-28 03:48:22

标签: javafx

我有一个关于 JavaFX 的基本问题,但无法弄清楚。对于 HBox,当我对 Label 和 ImageView 使用 getChildren().addAll() 时,我收到以下消息:

The method addAll(int, Collection<? extends Node>) in the type List<Node> is not applicable for the argument (Label, ImageView[])

我不确定是什么问题。如果它的(TextField, ImageView[]),我可以正常使用,但它不适用于(Label, ImageView[])。

这是我的简化代码:

ImageView[] imagesRow = new ImageView[2];
Image[] img = new Image[2];
String title = "Result";

img[0] = new Image("sample1.png", 60, 35, true, true);
img[1] = new Image("sample2.png", 60, 35, true, true);

imagesRow[0] = new ImageView();
imagesRow[1] = new ImageView();

imagesRow[0].setImage (img[0]);
imagesRow[1].setImage (img[1]);

Label label = new Label();
label.setText(title + ": ");

// Create horizontal box 
HBox box = new HBox();
box.setPadding(new Insets(20, 5 , 2, 50));
box.getChildren().addAll(label, imagesRow); // issue here

我能问一下原因吗,我应该怎么做才能将标签和图像水平对齐? 提前致谢。

1 个答案:

答案 0 :(得分:2)

Collection 需要是一种类型(或从层次结构中某处的公共父级继承)。

LabelNode 的一种类型,因此您尝试作为 Collection 参数的一部分传递的任何其他内容也必须是 Node。数组显然不是。

在您的情况下,您需要使用两次调用来填充 HBox 的子代:

box.getChildren().add(label);
box.getChildren().addAll(imagesRow);

您可以毫无问题地调用 addAll(imagesRow) 的原因是因为只有一个参数,您只能传入 one Collection,一个数组。

通过调用 addAll(label, imagesRow),您告诉 Java 您正在传递一种类型的 Collection,但实际上您传递的是一个 Node 和一个数组。

相关问题