XML ファイルから収集したデータを使用しています。を返すというXMLReader
メソッドを使用して、XML データ形式を読み取ることができると思われる というクラスを作成しました。readFromFile
ArrayList<HashMap<String, String>>
というクラスも作成し、コンストラクターから のextends
AbstractTableModel
インスタンスを作成しXMLReader
てメソッドを呼び出しますreadFromFile
。ポイントは、Implemented する必要があるとわかっているものはすべて実装し、オーバーライドする必要があるものはすべてオーバーライドしましたが、それでもJTable
XML ファイルからデータを表示することはできません。以下は、それぞれXMLReader
のクラスとクラスですextends
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;
}
AbstractTableModel
クラスはこちら
package meetingmanager;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class TableModel extends AbstractTableModel implements TableModelListener{
ArrayList<TableData> tblData = new ArrayList<TableData>();
ArrayList<FileContent> tblData2 = new ArrayList<FileContent>();
String[] columnName = {"S/N", "VisitorName", "Date of Visit", "Scheduled Date", "Whom to see", "Reason of visit", "status of Visit"};
ArrayList<HashMap<String, String>> fileData;
@SuppressWarnings("unchecked")
public TableModel()
{
fileData = new XMLReader().readFromFile();
}
@Override
public void tableChanged(TableModelEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public int getRowCount() {
return tblData.size();
}
@Override
public int getColumnCount() {
return 7;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
switch(columnIndex){
case 0:
return fileData.get(rowIndex).get("sN");
case 1:
return fileData.get(rowIndex).get("FirstName")+ " "+ fileData.get(rowIndex).get("SurName");
case 2:
return fileData.get(rowIndex).get("VisitTime");
case 3:
return fileData.get(rowIndex).get("ScheduledTime");
case 4:
return fileData.get(rowIndex).get("WhomToVisit");
case 5:
return fileData.get(rowIndex).get("ReasonForVisit");
case 6:
return fileData.get(rowIndex).get("Status");
default:
return "";
}
}
@Override
public String getColumnName(int col)
{
return columnName[col];
}
}
面白いことが起こります。コード行を以下に配置すると、テーブルに情報が表示されます。これはテストのみを目的としていましたが、コンストラクターに配置するとTableModel
すべての値が表示されましたが、削除するとテーブルは表示を拒否します
for(int i=0; i<fileData.size(); i++){
tblData.add(new TableData(1, "", "", "", "", "", ""));
}
私は過去にこれに取り組んできましたが、ten hours
なぜすべてのおかしなことが起こるのかについての解決策や説明はありません. 私はすべての助けをいただければ幸いです。ありがとう