JavaFX错误:不兼容的类型 - 无法将对象转换为节点

时间:2014-07-31 10:30:23

标签: javafx-8

我在网格窗格中的FXML文件中定义了3个标签。我试图阅读以下XML文件并在网格窗格中显示文件中的标签。 XML文件中的数值表示行&栏目位置。

<data>
<lbl1>0,0</lbl1>
<lbl2>0,1</lbl2>
<lbl3>0,2</lbl3>
</data>

我已将所有元素添加到HashMap中,然后检索它以进行显示。首先,我按如下方式逐一添加所有三个标签:

hm.put("lbl1", eElement.getElementsByTagName("lbl1").item(0).getTextContent());
hm.put("lbl2", eElement.getElementsByTagName("lbl2").item(0).getTextContent());
hm.put("lbl3", eElement.getElementsByTagName("lbl3").item(0).getTextContent());

然后我按如下方式显示它们:

grid.add(lbl1, Integer.parseInt(hm.get("lbl1").toString().split(",")[0]),Integer.parseInt(hm.get("lbl1").toString().split(",")[1]));
grid.add(lbl2, Integer.parseInt(hm.get("lbl2").toString().split(",")[0]),Integer.parseInt(hm.get("lbl2").toString().split(",")[1]));
grid.add(lbl3, Integer.parseInt(hm.get("lbl3").toString().split(",")[0]),Integer.parseInt(hm.get("lbl3").toString().split(",")[1]));

以上代码运行良好,没有任何问题,我可以看到网格上的标签。

现在,我不是逐个添加标签,而是通过'for'循环在一个语句中添加所有标签,如下所示:

if (!eElement.getTagName().toString().equals("data"))
            hm.put(eElement.getTagName(), eElement.getTextContent());

如果我尝试显示标签,例如:

grid.add(hm.get("lbl1"),0,0);

我收到错误:不兼容的类型 - 无法将对象转换为节点。

如果我试图进行类型转换:

grid.add((javafx.scene.Node) hm.get("lbl1"),0,0);

我收到错误: java.lang.ClassCastException:java.lang.String无法强制转换为javafx.scene.Node

如果我打印了hashmap条目,则会显示以下输出:

lbl1 = 0,0,lbl2 = 0,1,lbl3 = 0,2

如何解决此错误?有没有其他方法可以在一个语句中添加所有元素然后显示它们?

2 个答案:

答案 0 :(得分:5)

在您的导入中添加: -

导入javafx.scene.control.Label;

我怀疑当前的导入来自awt。

答案 1 :(得分:1)

从您的示例代码中,我猜hmMap<String, String>

的实例

因此,当您致电hm.get("lbl1")时,您会收到String

您尝试将此String添加到GridPane,但add()方法需要javafx.scene.Node。这就是为什么你得到一个错误“不兼容的类型”。

相反,您应该添加javafx.scene.control.Label(lbl1,lbl2,lbl3)的实例