Here you can see my application: 
So what I need to do:
I donβt know how I can with the help of XML Schema link with JTable with all types (int, string, float). Let's say that Year is an int type, and in an int schema, and how can I bind it? I donβt know how to link or link in English. In this application, I write all the data in an xml file, and when the application loads, it loads all the data from the XML file.
Here I create an xml schema:
public void CreateSchema(String FileName){ file=FileName; JAXBContext jc; try { jc = JAXBContext.newInstance(XmlSchemaType.class); jc.generateSchema(new SchemaOutputResolver() { @Override public javax.xml.transform.Result createOutput(String namespaceURI, String suggestedFileName)throws IOException { suggestedFileName=file+".xsd"; return new StreamResult(suggestedFileName); } }); } catch (IOException e) { e.printStackTrace(); } catch (JAXBException e) { e.printStackTrace(); } }
Here are all types:
import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "Auto") public class XmlSchemaType { row[] Row; } class row { @XmlAttribute byte ID; @XmlElement String VIN; @XmlElement String Make; @XmlElement String Model; @XmlElement int Year; @XmlElement String Description; @XmlElement float Cost; }
The xml file is written here:
public void CreateXml(JTable tb,JTable tb2,String FileName){ try { file=FileName; DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); Document doc = docBuilder.newDocument(); Element rootElement = doc.createElement("Auto"); doc.appendChild(rootElement); int i=0,j=0,k=0; while (i<tb.getRowCount()){ j=0; Element rows = doc.createElement("Row"); rootElement.appendChild(rows); Attr attr = doc.createAttribute("id"); attr.setValue((i+1)+""); rows.setAttributeNode(attr); //Pirma lentele while (j<tb.getColumnCount()-1){ Element element = doc.createElement(tb.getTableHeader().getColumnModel().getColumn(j).getHeaderValue()+""); element.appendChild(doc.createTextNode(tb.getModel().getValueAt(i, j)+"")); rows.appendChild(element); j++; } //Antra lentele j=2;//pirmu lauku nereikia while (j<tb2.getColumnCount()-1){ Element element2 = doc.createElement(tb2.getTableHeader().getColumnModel().getColumn(j).getHeaderValue()+""); element2.appendChild(doc.createTextNode(tb2.getModel().getValueAt(i, j)+"")); rows.appendChild(element2); if (j==2){ tb2.getModel().setValueAt(tb.getModel().getValueAt(i, 0),i,1); } j++; } i++; } TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result; try { FileOutputStream fileOutputStream = null; fileOutputStream = new FileOutputStream( new File(file+".xml")); result = new StreamResult(fileOutputStream);//new FileOutputStream(file+".xml")); transformer.setOutputProperty(OutputKeys.INDENT, "yes");//new line... kad butu naujoje eiluteje transformer.transform(source, result); try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } } catch (ParserConfigurationException pce) { pce.printStackTrace(); } catch (TransformerException tfe) { tfe.printStackTrace(); } //file.renameTo(FileName+".xml"); }
And here is the download of my xml file:
public void PopulateDataSet(JTable tb,JTable tb2,String FileName){ file=FileName; File f= new File(file+".xml"); if (f.exists()){ try { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(f); doc.getDocumentElement().normalize(); NodeList nList = doc.getElementsByTagName("Row"); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; DefaultTableModel model = (DefaultTableModel) tb.getModel(); model.addRow(new Object[] { "", "","","","Delete" }); tb.getModel().setValueAt(eElement.getElementsByTagName("VIN").item(0).getTextContent(),temp, 0); tb.getModel().setValueAt(eElement.getElementsByTagName("Make").item(0).getTextContent(),temp, 1); tb.getModel().setValueAt(eElement.getElementsByTagName("Make").item(0).getTextContent(),temp, 2); tb.getModel().setValueAt(eElement.getElementsByTagName("Year").item(0).getTextContent(),temp, 3); tb.getModel().setValueAt("Delete",temp, 4); DefaultTableModel model2 = (DefaultTableModel) tb2.getModel(); model2.addRow(new Object[] { (tb2.getRowCount()+1), "","","","Delete" }); tb2.getModel().setValueAt(eElement.getElementsByTagName("VIN").item(0).getTextContent(),temp, 1); tb2.getModel().setValueAt(eElement.getElementsByTagName("Description").item(0).getTextContent(),temp, 2); tb2.getModel().setValueAt(eElement.getElementsByTagName("Cost").item(0).getTextContent(),temp, 3); tb2.getModel().setValueAt("Delete",temp, 4); } } } catch (Exception e) { e.printStackTrace(); } } if (!f.exists()){ CreateXml(tb,tb2,file); CreateSchema(file); } }
But how to use xml shema with JTable, xml?