插入到DefaultTableModel中的行不显示

问题描述 投票:1回答:1

在我的Java 8应用程序中,我使用SwingWorker从数据库中获取一些数据,并在知道要添加到表中的整行数据后调用publish

DefaultTableModel dtm123 = (DefaultTableModel) myTable.getModel();

@Override
protected void process(List<Integer> chunks) {
    if(chunks!=null) {
        ListIterator<Integer> li = chunks.listIterator();

        while(li.hasNext()) {
            dtm123.addRow(myDataList.get(li.next()).getRowArray());
        }                    
    }
}

dtm123.getRowCount()每次都会增加(我检查过),但是该表并未更新为实际显示新行。我试图手动更新它,但也没有用:

dtm123.fireTableRowsInserted(0, dtm123.getColumnCount()-1);

这很奇怪:如果使用完整版,则可以很好地填充表格:

((DefaultTableModel) myTable.getModel()).addRow(myDataList.get(li.next()).getRowArray());

您不能使用简短版本填写表格吗? dtm123未在其他任何地方使用,所以两个版本有什么区别?

编辑:

像这样直接填充(不带SwingWorker)有效:

myTable.setModel(new DefaultTableModel(
    new Object[][] {},
    new Object[] {"blaA","blaB","blaC"}
));

DefaultTableModel dtm123 = (DefaultTableModel) myTable.getModel();
dtm123.addRow(new String[] {"bla1A","bla1B","bla1C"});
dtm123.addRow(new String[] {"bla2A","bla2B","bla2C"});
dtm123.addRow(new String[] {"bla3A","bla3B","bla3C"});
dtm123.addRow(new String[] {"bla4A","bla4B","bla4C"});
dtm123.addRow(new String[] {"bla5A","bla5B","bla5C"});
dtm123.addRow(new String[] {"bla6A","bla6B","bla6C"});
dtm123.addRow(new String[] {"bla7A","bla7B","bla7C"});

看起来像SwingWoker是问题,但为什么呢? process正在主线程上运行,该线程必须用于UI更新,并且没有异常或错误消息。

java jtable defaulttablemodel
1个回答
0
投票

已修复-无效的两个原因:

© www.soinside.com 2019 - 2024. All rights reserved.