Java JTable不显示我的xml数据

Java JTable不显示我的xml数据,java,swing,jtable,tablemodel,Java,Swing,Jtable,Tablemodel,我正在处理从XML文件收集的数据。我创建了一个名为XMLReader的类,该类可以使用名为readFromFile的方法读取XML数据格式,该方法返回一个ArrayList 我还创建了一个类扩展了AbstractTableModel,我从构造函数中创建了XMLReader的实例,并调用readFromFile方法。关键是我实现了我知道的所有需要实现的内容,并覆盖了所有需要覆盖的内容,但我仍然无法让我的JTable显示XML文件中的数据。下面是XMLReader类和分别扩展AbstractTabl

我正在处理从XML文件收集的数据。我创建了一个名为
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如此,如此之多,我甚至没有试着看清楚。谢谢更多我只是无法停止兴奋,非常感谢感谢如此,如此之多,我甚至没有试着看清楚。谢谢更多我只是无法停止兴奋,非常感谢