久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何使 xml 模式與 JTable、xml java 相關(guān)(鏈接)?

How to make xml schema relate(link) to JTable,xml java?(如何使 xml 模式與 JTable、xml java 相關(guān)(鏈接)?)
本文介紹了如何使 xml 模式與 JTable、xml java 相關(guān)(鏈接)?的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

在這里你可以看到我的申請(qǐng):

那么我需要做什么:

我不知道如何通過代碼鏈接 xml 架構(gòu)與所有類型(int、string、float)的 JTable.比如說 Year 是 int 類型,而 schema 是 int ,我如何鏈接它?我不知道英文鏈接或關(guān)聯(lián)如何.在這個(gè)應(yīng)用程序中,我將所有數(shù)據(jù)寫入 xml 文件,當(dāng)應(yīng)用程序加載時(shí),它會(huì)從 xml 文件加載所有數(shù)據(jù).

我在這里創(chuàng)建 xml 架構(gòu):

 public void CreateSchema(String FileName){文件=文件名;JAXB上下文 jc;嘗試 {jc = JAXBContext.newInstance(XmlSchemaType.class);jc.generateSchema(new SchemaOutputResolver() {@覆蓋公共 javax.xml.transform.Result createOutput(字符串 namespaceURI,字符串建議文件名)拋出 IOException {建議文件名=文件+.xsd";返回新的 StreamResult(suggestedFileName);}});} 捕捉(IOException e){e.printStackTrace();} 捕捉(JAXBException e){e.printStackTrace();}}

這里是所有類型:

 import javax.xml.bind.annotation.XmlAccessType;導(dǎo)入 javax.xml.bind.annotation.XmlAccessorType;導(dǎo)入 javax.xml.bind.annotation.XmlAttribute;導(dǎo)入 javax.xml.bind.annotation.XmlElement;導(dǎo)入 javax.xml.bind.annotation.XmlRootElement;@XmlAccessorType(XmlAccessType.FIELD)@XmlRootElement(name = "自動(dòng)")公共類 XmlSchemaType {行[] 行;}類行{@XmlAttribute字節(jié)ID;@XmlElement字符串 VIN;@XmlElement字符串制作;@XmlElement字符串模型;@XmlElement整數(shù)年;@XmlElement字符串描述;@XmlElement浮動(dòng)成本;}

這里正在寫入 xml 文件:

public void CreateXml(JTable tb,JTable tb2,String FileName){嘗試 {文件=文件名;DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();DocumentBuilder docBuilder = docFactory.newDocumentBuilder();文檔 doc = docBuilder.newDocument();元素 rootElement = doc.createElement("Auto");doc.appendChild(rootElement);int i=0,j=0,k=0;而 (i

在這里加載我的 xml 文件:

 public void PopulateDataSet(JTable tb,JTable tb2,String FileName){文件=文件名;文件 f= 新文件(文件+.xml");如果(f.exists()){嘗試 {DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();文檔 doc = dBuilder.parse(f);doc.getDocumentElement().normalize();NodeList nList = doc.getElementsByTagName("Row");for (int temp = 0; temp < nList.getLength(); temp++) {節(jié)點(diǎn) nNode = nList.item(temp);if (nNode.getNodeType() == Node.ELEMENT_NODE) {元素 eElement = (元素) nNode;DefaultTableModel 模型 = (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("刪除",temp, 4);DefaultTableModel model2 = (DefaultTableModel) tb2.getModel();model2.addRow(new Object[] { (tb2.getRowCount()+1), "","","","刪除" });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("刪除",temp, 4);}}} 捕捉(異常 e){e.printStackTrace();}}如果(!f.exists()){CreateXml(tb,tb2,文件);創(chuàng)建模式(文件);}}

但是如何將xml shema與JTable、xml一起使用呢?

解決方案

"這里正在寫入 xml 文件:" ---- "這里正在加載我的 xml 文件:"

當(dāng)您已經(jīng)在使用 JAXB 映射時(shí),為什么還要使用 DOM 來讀取和寫入 xml.如果您正確地進(jìn)行映射1,只需使用 <小時(shí)>

注意: 使用上面的 JAXB 注釋,您可以創(chuàng)建架構(gòu),并且您想針對(duì)它驗(yàn)證 xml,您可以在解組時(shí)設(shè)置架構(gòu).比如:

private static AutoModel unmarshal(String file) throws Exception {JAXBContext 上下文 = JAXBContext.newInstance(AutoModel.class);解組器 unmarshaller = context.createUnmarshaller();SchemaFactory 工廠 = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);Schema schema = factory.newSchema(new File("src/table/autos.xsd"));unmarshaller.setSchema(schema);AutoModel 模型 = (AutoModel)unmarshaller.unmarshal(new File(file));返回模型;}

Here you can see my application:

So what i need to do:

I dont know how I can through code link xml schema with JTable with all type(int,string,float). Say like Year is type int and in schema is int and how i can link it? I dont know how will be in english link or relate. In this application i write all data to xml file, and when application loaded it loads all data from xml file.

Here i creating 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 is 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;
   }

Here is writing to xml file:

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 loading 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?

解決方案

"Here is writing to xml file:" ---- "And here loading my xml file:"

Why are you using DOM to read and write the xml, when you are already using JAXB Mapping. If you are doing the mapping correctly 1, it's just a matter of using the Marshaller and Unmarshaller to write and read, respectively. Make sure to look at those API links yo see example usage. It's only around 5 lines of code to handle each operaion.

(1) Please see the JAXB tutorial for more info about JAXB mapping.

Also, you can just create your own AbstractTableModel and unmarshal and marshal straight to and from the table model. This is probably the most effective way to keep everything sync. Create a class Auto to represent each row, and a class AutoModel, that will be the root element in the xml document, as well as the TableModel for the JTable. Something like:

Auto class

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Auto", propOrder = {
        "id", "VIN", "Make", "Model", "Year", "Description", "Cost"
})
public class Auto {
    @XmlElement(name = "id")
    Integer id;
    @XmlElement(name = "VIN")
    String VIN;
    @XmlElement(name = "Make")
    String Make;
    @XmlElement(name = "Model")
    String Model;
    @XmlElement(name = "Year")
    Integer Year;
    @XmlElement(name = "Description")
    String Description;
    @XmlElement(name = "Cost")
    Float Cost;

    // === DON'T FORGET YOUR GETTERS and SETTERS
}

AutoModel class

@XmlRootElement(name = "AutoList")
public class AutoModel extends AbstractTableModel {
    String[] columnNames = {"VIN", "Make", "Model", "Year"};

    @XmlElement(name = "Auto")
    protected List<Auto> autos;

    public AutoModel() {
        autos = new ArrayList<Auto>();
    }

    @Override
    public int getRowCount() {
        return autos.size();
    }

    @Override
    public int getColumnCount() {
        return columnNames.length;
    }

    @Override
    public String getColumnName(int columnIndex) {
        return columnNames[columnIndex];
    }

    @Override
    public boolean isCellEditable(int row, int col) {
        return false;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Auto auto = autos.get(rowIndex);
        Object value = null;
        switch (columnIndex) {
            case 0 : value = auto.getVIN(); break;
            case 1 : value = auto.getMake(); break;
            case 2 : value = auto.getModel(); break;
            case 3 : value = auto.getYear(); break;
        }
        return value;
    }
}

Test, using this xml file

<?xml version="1.0" encoding="UTF-8"?>
<AutoList>
    <Auto>
        <id>1</id>
        <VIN>123456788910FASDE</VIN>
        <Make>Mercedes</Make>
        <Model>CL 550</Model>
        <Year>2012</Year>
        <Description>Hello World</Description>
        <Cost>80000.00</Cost>
    </Auto>
</AutoList>

import java.awt.Dimension;
import java.io.File;
import javax.swing.*;
import javax.xml.bind.*;

public class TestTableMarshall {

    private static final String INPUT_FILE = "src/table/autos.xml";
    private static final String OUTPUT_FILE = "src/table/autos1.xml";

    public static void main(String[] args) throws Exception {
        AutoModel model = unmarshal(INPUT_FILE);
        JTable table = new JTable(model) {
            @Override
            public Dimension getPreferredScrollableViewportSize() {
                return getPreferredSize();
            }
        };
        JOptionPane.showMessageDialog(null, new JScrollPane(table));
        marshal(model, OUTPUT_FILE);

    }

    private static void marshal(AutoModel model, String file) throws Exception {
        JAXBContext context = JAXBContext.newInstance(AutoModel.class);
        Marshaller marshaller = context.createMarshaller();
        File f= new File(file);
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(model, f);
    }

    private static AutoModel unmarshal(String file) throws Exception {
        JAXBContext context = JAXBContext.newInstance(AutoModel.class);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        AutoModel model = (AutoModel)unmarshaller.unmarshal(new File(file));
        return model;
    }
}


As far the the AutoModel goes, it only works for your first table. You will need to create another model for your repairs table. Also, the model, currently only offered read-only. You will need to add other functionality to say add a row and set individual values.

Here are some resources to look at:

  • How to Use Tables: Creating a Table Model
  • JAXB Specification toturial

NOTE: With the JAXB annotations above you can create the schema, and you you want to validate the xml against it, you could just set the schema when you unmarshal. Something like:

private static AutoModel unmarshal(String file) throws Exception {
    JAXBContext context = JAXBContext.newInstance(AutoModel.class);
    Unmarshaller unmarshaller = context.createUnmarshaller();
    SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema = factory.newSchema(new File("src/table/autos.xsd"));
    unmarshaller.setSchema(schema);
    AutoModel model = (AutoModel)unmarshaller.unmarshal(new File(file));
    return model;
}

這篇關(guān)于如何使 xml 模式與 JTable、xml java 相關(guān)(鏈接)?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

How to wrap text around components in a JTextPane?(如何在 JTextPane 中的組件周圍環(huán)繞文本?)
MyBatis, how to get the auto generated key of an insert? [MySql](MyBatis,如何獲取插入的自動(dòng)生成密鑰?[MySql])
Inserting to Oracle Nested Table in Java(在 Java 中插入 Oracle 嵌套表)
Java: How to insert CLOB into oracle database(Java:如何將 CLOB 插入 oracle 數(shù)據(jù)庫)
Why does Spring-data-jdbc not save my Car object?(為什么 Spring-data-jdbc 不保存我的 Car 對(duì)象?)
Use threading to process file chunk by chunk(使用線程逐塊處理文件)
主站蜘蛛池模板: 黄色片在线观看网址 | 香蕉二区 | 黄a大片 | 欧美性精品 | 亚洲欧美日韩成人在线 | 久久精品亚洲欧美日韩久久 | 日韩中文字幕在线视频 | 污片在线观看 | 久草.com | 亚洲成人激情在线观看 | 五月婷六月丁香 | 久久精品国产亚洲a | 免费一区二区在线观看 | 国产一级在线 | www.国产91 | 国外成人在线视频 | 国产精品成人一区 | 黑人精品欧美一区二区蜜桃 | 久久免费高清视频 | 91精品国产91久久久久久 | 中文字幕日韩三级 | 狠狠狠| 国产一区二区三区www | 黄色av网站免费看 | 欧美精品乱码99久久影院 | 无码国模国产在线观看 | 精品国产乱码久久久久久蜜臀 | 91中文视频| 日韩视频精品在线 | 一级欧美一级日韩片免费观看 | 国产一二区视频 | 中文字幕视频一区 | 精品国产黄a∨片高清在线 www.一级片 国产欧美日韩综合精品一区二区 | av在线免费不卡 | 日韩美女一区二区三区在线观看 | 91xxx在线观看| 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 久久久久九九九女人毛片 | 久久久久久成人 | 国产精品久久久久久久久久免费看 | 亚洲欧美成人影院 |