java - 在 jTable 中设置 XML 值

标签 java xml swing tablemodel

我有一个 jTable,现在我想将 XML 文件的内容添加到其中。 我不知道应该如何浏览 XML 文件,目前我只能操作数据(重写、删除)并获取单个标签的值,而不是所有标签的值。 我正在使用 JDOM

我的 XML 文件如下所示:

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

  <Entity>
    <Name>Aposting</Name>
    <Art>1</Art>
    <Datum>Wed Nov 19 11:30:34 CET 2014</Datum>
  </Entity>

  <Entity>
    <Name>Aposting</Name>
    <Art>1</Art>
    <Datum>Wed Nov 19 15:21:12 CET 2014</Datum>
  </Entity>

  <Entity>
    <Name>Aposting</Name>
    <Art>2</Art>
    <Datum>Thu Nov 20 8:01:10 CET 2014</Datum>
  </Entity>

</app>

我想把它显示在这样的表格中:

enter image description here

谢谢你的帮助

编辑:

我做了一个自定义模型

package TableTest;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;

/**
 *
 * @author Administrator
 */
public class ModelData implements TableModel {

    List<TableData> data = new ArrayList<>();
    String colNames[] = {"Name", "Type", "Date"};
    Class<?> colClasses[] = {String.class, String.class, Date.class};

    ModelData() {
        data.add(new TableData("Aposting", "Created", new Date()));
        data.add(new TableData("Aposting", "Edited", new Date()));
        data.add(new TableData("Aposting", "Edited", new Date()));
        data.add(new TableData("Aposting", "Deleted", new Date()));
    }

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

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

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        if (columnIndex == 0) {
            return data.get(rowIndex).getName();
        }
        if (columnIndex == 1) {
            return data.get(rowIndex).getType();
        }
        if (columnIndex == 2) {
            return data.get(rowIndex).getDate();
        }
        return null;
    }

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

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        return colClasses[columnIndex];
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return true;
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {

        if (columnIndex == 0) {
            data.get(rowIndex).setName((String) aValue);
        }
        if (columnIndex == 1) {
            data.get(rowIndex).setType((String) aValue);
        }
        if (columnIndex == 2) {
            data.get(rowIndex).setDate((Date) aValue);
        }
    }

    @Override
    public void addTableModelListener(TableModelListener l) {

    }

    @Override
    public void removeTableModelListener(TableModelListener l) {

    }
}

和一个要访问的 TableData 类:

package TableTest;

import java.util.Date;

public class TableData {

    String name;
    String type;
    Date date;

    public TableData(String name, String type, Date date) {
        super();
        this.name = name;
        this.type = type;
        this.date = date;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

}

它与“ModelData”中的附加值一起使用 但我仍然不知道如何从我的 XML 文件中提取所有实体

最佳答案

为此你需要两件事:

根据选择的解析器,您可以

  • 构造一个 Java 数据结构,例如List<Entity> , 可以在 TableModel 中访问.

  • 直接访问文档对象模型满足TableModel契约(Contract)getValueAt() , getRowCount()

附录:基于您的 edit ,

  • 当您评估其他解析选项时,从一个简单的 SAXParser 开始,图文并茂here .该示例构建了一个 List<School> ;你将构建一个 List<TableData> .

  • 在您的自定义表格模型中,扩展 AbstractTableModel获得事件处理说明 here .

关于java - 在 jTable 中设置 XML 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27014038/

相关文章:

java - opentsdb 是否接受特殊字符,如度数符号 (°)、% 或 ²

php - 使用php解析XML数据放入mysql数据库

Java - 移动 JPanel 的位置

java - JXTable java.lang.IndexOutOfBoundsException : Invalid range

java - 错误 : Could not find or load main class sample. 主要

java - CFHTTP - 从以 block 为单位传输的 URL 中读取数据

java - Liquibase XML 生成器

java - Xml如何设置UTF-16编码格式?

java - 在 JScrollPane 中显示 JLayeredPane

java - 为什么自定义异常 java 类应该是最终的