我有一个关于 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
我能问一下原因吗,我应该怎么做才能将标签和图像水平对齐? 提前致谢。
答案 0 :(得分:2)
Collection
需要是一种类型(或从层次结构中某处的公共父级继承)。
Label
是 Node
的一种类型,因此您尝试作为 Collection
参数的一部分传递的任何其他内容也必须是 Node
。数组显然不是。
在您的情况下,您需要使用两次调用来填充 HBox
的子代:
box.getChildren().add(label);
box.getChildren().addAll(imagesRow);
您可以毫无问题地调用 addAll(imagesRow)
的原因是因为只有一个参数,您只能传入 one Collection
,一个数组。
通过调用 addAll(label, imagesRow)
,您告诉 Java 您正在传递一种类型的 Collection
,但实际上您传递的是一个 Node
和一个数组。