2012-08-25 125 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