java - 创建 TableModel 并动态填充 jTable

标签 java swing jtable tablemodel abstracttablemodel

我想将读取lucene索引的结果存储到jTable中,这样我就可以按不同的列进行排序。从索引中,我正在阅读具有不同频率度量的术语。

表格列是这些: [字符串术语][int absFrequency][int docFrequency][double invFrequency]

所以我在 AbstractTableModel 中可以定义列名,但我不知道如何使用以下方法的结果获取 Object[][]data:

public static void FrequencyMap(Directory indexDir) throws Exception
{        
        List<ArrayList>redoviLista = new ArrayList<ArrayList>();


        //final Map<String,TermRow> map = new TreeMap<String,TermRow>(); 
        List<String>termList = new ArrayList<String>();

        IndexReader iReader = IndexReader.open(indexDir);
        FilterIndexReader fReader = new FilterIndexReader(iReader);

        int numOfDocs = fReader.numDocs();
        TermEnum terms = fReader.terms(); 

        while (terms.next()){
            Term term = terms.term(); 
            String termText = term.text();
            termList.add(termText);

//Calculating the frequencies   
            int df = iReader.docFreq(term);
            double idf = 0.0F;
            idf = Math.log10((double) numOfDocs / df);
            double tfidf = (df*idf);

    //Here comes important part
            //Changes according to takoi's answer   
        ArrayList<Object> oneRow = new ArrayList<Object>();
            oneRow.add(termText);
            oneRow.add(df);
            oneRow.add(idf);
            oneRow.add(tfidf);
            redoviLista.add(oneRow);


        }
        iReader.close();
  // So I need something like this, and i Neeed this array to be stored out of this method

所以我有点卡在这里继续实现 AbstractTableModel 并填充和显示此表....:/

请帮忙!

最佳答案

当您在模型中插入、删除或更新数据时,您需要将更改通知 GUI。您可以使用 AbstractTableModel 中的 fire 方法来做到这一点。 .

即如果向列表中添加元素,还必须调用 fireTableRowsInserted(int firstRow, int lastRow) 以便更新可见层。

看看下面代码中的 addElement(MyElement e):

public class MyModel extends AbstractTableModel {

    private static final String[] columnNames = {"column 1", "column 2"};
    private final LinkedList<MyElement> list;

    private MyModel() {
        list = new LinkedList<MyElement>();
    }

    public void addElement(MyElement e) {
        // Adds the element in the last position in the list
        list.add(e);
        fireTableRowsInserted(list.size()-1, list.size()-1);
    }

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

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

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        switch(columnIndex) {
            case 0: return list.get(rowIndex).getColumnOne();
            case 1: return list.get(rowIndex).getColumnOne();
        }
        return null;
    }

}

关于java - 创建 TableModel 并动态填充 jTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2937991/

相关文章:

java - 调用方法?

java - 表格左侧可见的列名而不是顶部

java - 在 JTable 中使用 JButton 和 Action 有哪些缺点?

Mac 操作系统不支持 Java 翻页?

java - 如何使用 java 归档文件修订安全?

java - Java 类之间的消息传递如何最好地完成?

java - 禁用除 java swing 中的文本区域之外的所有触发器

java - R 无法在 android 4.2.2 属性上解析

java - 当 xtext 的 EMF 模型更改为适当的值时如何获取通知

java - 具有自动高度的多行 JTable 单元格 - 第一行超大