2012-07-07 87 views
0

我遇到了类似于我在这里读到的有关插入数据和添加的数据未显示在jtable上的问题。我试图重绘()和重新验证(),但无济于事。jtable更新数据不可见

基本上,我有两个类说A和B. A类调用一个函数在表中添加一行数据。下面是代码(通过我使用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)我设置了该值,但没有显示在表格中。感谢您的帮助。

+4

您确定要更改数据的JTable jTable1与显示的JTable实例相同吗?我在这里的经验表明,像这样的错误往往是由于错误的参考。请注意,您的帖子和代码没有告诉我们足够多的信息能够给您一个充满信心的答案。你需要问一个更好的信息问题 - 除非有人做出了幸运的猜测。 – 2012-07-07 04:15:29

回答

4

最好是,如果你可以撰写一个SSCCE来证明问题。

没有必要拨打repaint()/revalidate()。作为insertRow()的结果,该模型将通过执行fireTableRowsInserted()来触发表刷新。

DefaultTableModel使用vector它有零基索引。 insertRow()调用Vector.insertElementAt()如果索引超出范围,则抛出ArrayIndexOutOfBoundsException

假设你的模型是空的,试试这个:

myModel.insertRow(0, str); 

此外,还要确保你EDT与该表进行交互。