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

enr*_*riq 1 javafx-8

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

<data>
<lbl1>0,0</lbl1>
<lbl2>0,1</lbl2>
<lbl3>0,2</lbl3>
</data>
Run Code Online (Sandbox Code Playgroud)

我已将所有元素添加到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());
Run Code Online (Sandbox Code Playgroud)

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

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]));
Run Code Online (Sandbox Code Playgroud)

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

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

if (!eElement.getTagName().toString().equals("data"))
            hm.put(eElement.getTagName(), eElement.getTextContent());
Run Code Online (Sandbox Code Playgroud)

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

grid.add(hm.get("lbl1"),0,0);
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:不兼容的类型 - 对象无法转换为Node.

如果我试图强制转换:

grid.add((javafx.scene.Node) hm.get("lbl1"),0,0);
Run Code Online (Sandbox Code Playgroud)

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

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

lbl1 = 0,0,lbl2 = 0,1,lbl3 = 0.2

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

小智 5

在您的导入中添加: -

import javafx.scene.control.Label;

我怀疑目前的进口来自awt.