jtable更新数据不可见

时间:2012-07-07 03:11:39

标签: java swing concurrency jtable event-dispatch-thread

我遇到的问题类似于我在这里读到的关于插入数据和添加的数据没有出现在jtable上的问题。我尝试过repaint()和revalidate(),但无济于事。

基本上,我有两个类,比如说A和B.A在B类中调用一个函数来向表中添加一行数据。这是代码。(顺便说一下,我使用Netbeans 7.1.2添加表,然后添加一些代码来处理更新。)

public void callUpdateTable(){
    DefaultTableModel myModel = (DefaultTableModel)jTable1.getModel();
    DateFormat dateFormate = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    Object[] str = new Object[3];
    Date date = new Date();  

    str[0] = dateFormate.format(date);
    str[1] = "Robot";
    str[2] = "hello"; 
    // myModel.addRow(str);
    myModel.insertRow(1, str);
    myModel.setValueAt("Hello", 1, 2);
    System.out.println("count = " + myModel.getValueAt(1, 2));
    jTable1.repaint();
}

有趣的是在系统打印时打印出单元格中的值(1,2)我设置了值,但没有显示在表格上。谢谢你的帮助。

1 个答案:

答案 0 :(得分:4)

最好是可以撰写演示此问题的SSCCE

无需致电repaint()/revalidate()。作为insertRow()的结果,模型将通过执行fireTableRowsInserted()来触发表刷新。

DefaultTableModel使用vector,其基于零的索引。 insertRow()调用Vector.insertElementAt(),如果索引超出范围,则会ArrayIndexOutOfBoundsException

假设您的模型为空,请尝试以下操作:

myModel.insertRow(0, str);

另外,请确保您与EDT上的表格进行互动。

相关问题