2012-08-25 94 views
1

我使用NetBeans GUI构建了一个jTable,并且我想在类的构造函数中更新它。我打算在框架上添加一个搜索选项,这样整个更新的想法对我来说就非常重要。Java swing jTable未更新

我的代码:

public availableTrumps(TrumpistClient TC){ 
    initComponents(); 
    availableTrumpsTrumpistClient=TC; 
    String result=null; 

    String query="SELECT * FROM APP.TRUMPS"; 

     result=this.availableTrumpsTrumpistClient.WritingReading("sql_select", query); 

     if (result.contains("empty")){ 
      JOptionPane.showMessageDialog(this, "There are now trumps to show."); 
     } 
     else if (result.contains("error")){ 
      JOptionPane.showMessageDialog(this, "Error in the connection. Please try again."); 
     } 
     else{ 
      int i; 
      String []data = result.split("\r\n"); 
      String [][] data2 = new String [data.length][]; 
      for (i = 0; i < data.length; i++) 
      { 
       data2[i] = data[i].split("&"); 
      } 
      String[] columnNames = {"From", "To", "Departure Time", "Remaining Places", "Proposer", "ClosingTime", "Cost Per Seat" }; 
      this.jTable1 = new JTable(data2,columnNames); 
      this.jTable1.setPreferredScrollableViewportSize(new Dimension(500,100)); 
      this.jTable1.setFillsViewportHeight(true); 
      JScrollPane jps = new JScrollPane(jTable1); 
      add(jps); 
      jTable1.revalidate(); 

    } 

    } 

输入二维阵列DATA2是精细和验证。 我添加了代码的最后5行,看看他们是否有帮助。我不知道它们是否是强制性的,并且无论如何我不想改变我用GUI构建的jTable的图形属性(只是其中的数据)。 当我运行该程序时,我发现jTable保持空白。 为什么?

+0

如果使用Netbeans表单编辑器构建GUI,为什么要添加另一个JTable? – MadProgrammer

+2

您正在创建一个新的'JTable'和'JScrollPane',但没有替换旧的。你应该只需要一个 - 通过表格的模型来改变表格数据。 – oldrinb

+0

考虑到它现在正在工作。谢谢。 – Onca

回答

4

我建议你使用表模型,只要数据改变你改变模型。只需构建JTable实例一次,而不是每当需要更改数据时。

+0

好的,谢谢,我尝试使用原始表模型,它的工作。再次感谢。 – Onca

2

正如其他人所说,你不要想创建多个JTable实例。创建一个这样的:

DefaultTableModel model = new DefaultTableModel(new Object[0][0], 
    new String[]{"From", "To", "etc."}); 

JTable table = new JTable(model); 

然后,当你需要添加行,请使用

model.addRow(dataForThisRow); // Object 

如果要更改单元格:

model.setValueAt(newValue, row, col); // Object, int, int 

或者,要删除行i

model.removeRow(i); // int 

For mor电子信息,请参阅the DefaultTableModel documentation


如果由于某种原因,它是你必须每次都重新创建表,我相信问题是,你无需调用repaint调用revalidate

+0

我使用了模型。它正在工作,谢谢。 – Onca