我在网格窗格中的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
如何解决此错误?有没有其他方法可以在一个语句中添加所有元素然后显示它们?
答案 0 :(得分:5)
在您的导入中添加: -
导入javafx.scene.control.Label;
我怀疑当前的导入来自awt。
答案 1 :(得分:1)
从您的示例代码中,我猜hm
是Map<String, String>
因此,当您致电hm.get("lbl1")
时,您会收到String
。
您尝试将此String
添加到GridPane
,但add()方法需要javafx.scene.Node
。这就是为什么你得到一个错误“不兼容的类型”。
相反,您应该添加javafx.scene.control.Label
(lbl1,lbl2,lbl3)的实例