从XML创建一个列表以添加到jTable

时间:2014-11-20 17:22:11

标签: java xml swing jtable

您好我正在尝试将我的XML文件中的值放到表中,但是它表示列表的长度为0。

package TableTest;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import org.jdom2.Element;

public class JTableDemo extends JFrame {

    JTable table;
    DefaultTableModel model;
    List<TableData> data = new ArrayList<>();

    public static void main(String[] args) {
        // Die Namen der Columns
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new JTableDemo().setVisible(true);
            }
        });

    }

    public JTableDemo() {
        // Per Xml datei laden
        List list = XmlData.instance.getRootElement().getChildren("Entity");

        System.out.println("Die größe ist: " + list.size());

        for (int i = 0; i < list.size(); i++) {
            Element e = (Element) list.get(i);

            System.out.println(i + " von " + e.getChildText("Name") + " " + e.getChildText("Art") + " " + e.getChildText("Datum"));
            data.add(new TableData(e.getChildText("Name"), e.getChildText("Art"), e.getChildText("Datum")));
        }

        Item i1 = new Item("Test", "Hi","hi");
        Item i2 = new Item("Test1", "Hi", "hi");
        Item i3 = new Item("Test2", "Hi", "hi");

        // Spalten Überschrift
        String[] titles = new String[]{"Name", "Art", "Datum"};

        model = new DefaultTableModel(titles, 0);

        table = new JTable(model);

        // Items Model hinzufügen
        model.addRow(i1.getItem());
        model.addRow(i2.getItem());
        model.addRow(i3.getItem());

        // ###### // 
        setTitle("Demo");

        getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setPreferredSize(new Dimension(500, 500));
        setMinimumSize(getPreferredSize());
        setMaximumSize(getPreferredSize());

    }

    private class Item {

        Vector<String> name;
        Vector<String> type;
        Vector <String> date;

        // ####### // 
        public Item(String name, String type, String date) {
            this.type = new Vector<>();
            this.name = new Vector<>();
            this.date = new Vector<>();
            this.name.add(name);
            this.type.add(type);
            this.date.add(date);
        }

        // Gibt das Item zurück
        public Vector getItem() {
            Vector i = new Vector();

            i.add(name);
            i.add(type);

            return i;
        }

    }

}

我创建的i1,i2等测试项目显示在表格中但是我需要将这些XML值放在一个项目中以将其添加到我的表格中,我无法制作自定义模型,因为截止日期很快就会出现问题出现在几分钟前。

<?xml version="1.0" encoding="UTF-8"?>
<app>
  <!-- Pfad für Templates und speicher ort für die Entity.java-->
  <Entity>
    <Name>Buchung</Name>
    <Art>0</Art>
    <Datum>Wed Nov 19 11:25:20 CET 2014</Datum>
  </Entity>
</app>

编辑:

我试着用

添加它
for (Object l1 : data){
    model.addRow(l1);
}

但这不会起作用,因为它需要一个对象[]

但我不知道该怎么做

并在开头说“Diegrößeist:0”(大小为:0)

编辑:

package TableTest;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import xmlModul.XmlLoader;

public class XmlData extends XmlLoader {

    /**
     * instance von der Klasse XmlLoader
     */
    public static final XmlLoader instance = new XmlLoader();

    /**
     * config file
     */
    private File tbfile;

    /**
     * JDOM Document
     */
    private Document document;

    /**
     * Wurzel Element
     */
    private Element rootElement;

    /**
     * Standart Konstruktor <br> Lädt die Config xml datei
     */
    public XmlData() {
        try {
            this.tbfile = new File("tbcont.xml");
            this.document = new SAXBuilder().build(tbfile);
            this.rootElement = document.getRootElement();
        } catch (JDOMException | IOException ex) {
            Logger.getLogger(XmlLoader.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void writeNewFile() {

        try {
            XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
            outputter.output(document, new FileWriter(tbfile));
        } catch (IOException ex) {
            Logger.getLogger(XmlLoader.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    @Override
    public Element getRootElement() {
        return rootElement;
    }



    public void addElement(String s, int i, Date d) {
        String sName = "Name";
        String sArt = "Art";
        String sDatum = "Datum";
        Element child = new Element("Entity");
        child.addContent(new Element(sName).setText(s));
        child.addContent(new Element(sArt).setText(String.valueOf(i)));
        child.addContent(new Element(sDatum).setText(d.toString()));
        rootElement.addContent(child);
        try {
            FileWriter writer = new FileWriter("tbcont.xml");
            XMLOutputter outputter = new XMLOutputter();
            outputter.setFormat(Format.getPrettyFormat());
            outputter.output(document, writer);
            outputter.output(document, System.out);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

0 个答案:

没有答案