Java JTable不显示我的xml数据
我正在处理从XML文件收集的数据。我创建了一个名为Java JTable不显示我的xml数据,java,swing,jtable,tablemodel,Java,Swing,Jtable,Tablemodel,我正在处理从XML文件收集的数据。我创建了一个名为XMLReader的类,该类可以使用名为readFromFile的方法读取XML数据格式,该方法返回一个ArrayList 我还创建了一个类扩展了AbstractTableModel,我从构造函数中创建了XMLReader的实例,并调用readFromFile方法。关键是我实现了我知道的所有需要实现的内容,并覆盖了所有需要覆盖的内容,但我仍然无法让我的JTable显示XML文件中的数据。下面是XMLReader类和分别扩展AbstractTabl
XMLReader
的类,该类可以使用名为readFromFile
的方法读取XML数据格式,该方法返回一个ArrayList
我还创建了一个类扩展了AbstractTableModel
,我从构造函数中创建了XMLReader
的实例,并调用readFromFile
方法。关键是我实现了我知道的所有需要实现的内容,并覆盖了所有需要覆盖的内容,但我仍然无法让我的JTable
显示XML文件中的数据。下面是XMLReader
类和分别扩展AbstractTableModel
的类
package meetingmanager;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class XMLReader {
private static final String filePath = "XMLData.xml";
public String sN;
public String firstName;
public String surName;
public String visitTime;
public String scheduledTime;
public String whomToVisit;
public String reasonForVisit;
public String status;
public XMLReader()
{
}
public ArrayList<HashMap<String, String>> readFromFile()
{
try{
File xmlFile = new File(filePath);
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = docFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("Visitor");
ArrayList<HashMap<String, String>> tblData = new ArrayList<>();
for(int i = 0; i<nList.getLength(); i++)
{
Node nNode = nList.item(i);
NamedNodeMap attr = nNode.getAttributes();
Node nodeAttr = attr.getNamedItem("id");
String[] rowValues = new String[8];
HashMap<String, String> mp = new HashMap<>();
sN = nodeAttr.getTextContent();
if(nNode.getNodeType() == Node.ELEMENT_NODE)
{
NodeList valueList = nNode.getChildNodes();
for(int j=0; j<valueList.getLength(); j++)
{
rowValues[0] = sN;
Node eachValue = valueList.item(j);
String nodeName = eachValue.getNodeName();
String value = eachValue.getTextContent();
mp.put("sN", sN);
int count = j+1;
switch(nodeName)
{
case "FirstName":
firstName = value;
rowValues[count] = value;
mp.put("FirstName", value);
break;
case "SurName":
surName = value;
rowValues[count] = value;
mp.put("SurName", value);
break;
case "VisitTime":
visitTime = value;
rowValues[count] = value;
break;
case "ScheduledTime":
scheduledTime = value;
rowValues[count] = value;
mp.put("ScheduledTime", value);
break;
case "WhomToVisit":
whomToVisit = value;
rowValues[count] = value;
mp.put("WhomToVisit", value);
break;
case "ReasonForVisit":
reasonForVisit = value;
mp.put("ReasonForVisit", value);
rowValues[count] = value;
break;
case "Status":
status = value;
rowValues[count] = value;
mp.put("Status", value);
break;
}
}
// tblData.add(rowValues);
tblData.add(mp);
}
}
return tblData;
//System.out.println(tblData.get(1000)[0]);
}catch(ParserConfigurationException | SAXException | IOException | DOMException ex)
{
}
return null;
}
有趣的事情发生了,当我把代码行放在下面时,表显示了信息,它只是为了测试,但是当我把它放在TableModel
的构造函数中时,它显示了我的所有值,但是当我删除它时,表拒绝显示
for(int i=0; i<fileData.size(); i++){
tblData.add(new TableData(1, "", "", "", "", "", ""));
}
for(int i=0;i这里是问题的原因:
@Override
public int getRowCount() {
return tblData.size();
}
tblData
与您的XML数据无关。您应该(确保fileData
不为空):
通过输入代码:
for(int i=0; i<fileData.size(); i++){
tblData.add(new TableData(1, "", "", "", "", "", ""));
}
for(int i=0;i这里是问题的原因:
@Override
public int getRowCount() {
return tblData.size();
}
tblData
与您的XML数据无关。您应该(确保fileData
不为空):
通过输入代码:
for(int i=0; i<fileData.size(); i++){
tblData.add(new TableData(1, "", "", "", "", "", ""));
}
for(int i=0;iThanks如此,如此之多,我甚至没有试着看清楚。谢谢更多我只是无法停止兴奋,非常感谢感谢如此,如此之多,我甚至没有试着看清楚。谢谢更多我只是无法停止兴奋,非常感谢