在基于Java的解析器中管理主表的最有效方法

时间:2010-01-20 03:58:24

标签: java swing

我正在开发一个基于Swing的项目,该项目将使用Table组件显示大量数据。我正在尝试确定解析数据的效率和管理方面的最佳替代方案。可以操纵主表(即可以创建或删除完整数据的视图),因此需要将完整数据保存在内存中

我知道这些问题可以有很多不同的解决方案。我想过创建一个表示日志中一个条目的类,其中的属性表示每个“属性”。我可以使用Comparator对象根据这些字段进行排序,并使用这些对象来构建表组件。 如果条目总数大约为5000-10000行

,这可能不是一个好主意

收到关于管理此类数据并对其进行操作以呈现图形组件的良好做法的任何建议。

提供的细节不多,所以我基本上都在寻找有关如何解决问题的一般想法。

1 个答案:

答案 0 :(得分:0)

我假设文件都已解析,并且内存中表示已解析的数据 显示表格时可用。您需要拥有自己的tablemodel,它从解析的文件中获取数据。

下面的内容可以是您的桌面型号:

class MyTableModel extends AbstractTableModel {
    private final List<String> columnNames;
    private List<RowData>      rows;

    MyTableModel() {
        columnNames = new ArrayList<String>();
        columnNames.add("Name");
        //...
        rows = new ArrayList<RowData>();
    }

    // populate the table data model with a List
    // that contains parsed data, each list element 
    // could correspond to a record or line (say)
    void setCoreData(final List<RowData> data) {
        this.rows = data;
    }

    public Object getValueAt(final int pRow, final int pCol) {
        if (getColumnName(pCol).equals("Name")) {
            return rows.get(pRow).getName();
        }
        //... .

    }

// corresponds to the rows of table instances of which 
// are created by output of parsing
private class RowData {
    private String name;

    public Object getName() {
        return name;
    }
}

// table instantitaion can be as below (say)
JTable myTable = new JTable(new MyTableModel());

class MyTableModel extends AbstractTableModel { private final List<String> columnNames; private List<RowData> rows; MyTableModel() { columnNames = new ArrayList<String>(); columnNames.add("Name"); //... rows = new ArrayList<RowData>(); } // populate the table data model with a List // that contains parsed data, each list element // could correspond to a record or line (say) void setCoreData(final List<RowData> data) { this.rows = data; } public Object getValueAt(final int pRow, final int pCol) { if (getColumnName(pCol).equals("Name")) { return rows.get(pRow).getName(); } //... . } // corresponds to the rows of table instances of which // are created by output of parsing private class RowData { private String name; public Object getName() { return name; } } // table instantitaion can be as below (say) JTable myTable = new JTable(new MyTableModel());