2013-10-16 32 views
1

我有一個JTable 7列和2行。在我的JTable下面我有一個JTextField。當我在JTextField型的東西,我可以伊斯利得到什麼我輸入:String lookFor = this.jTextField2.getText();刷新JTable當鍵入的文本是JTable中的一行

但現在,我想刷新我的JTable後,我在我的JTextField型的東西,但只有當行(或列)包含(S)來自JTextField的文本。我試過了,沒有結果:

public Object[][] getTableData(JTable table) { 
     DefaultTableModel dtm = (DefaultTableModel) table.getModel(); 
     int nRow = dtm.getRowCount(), nCol = dtm.getColumnCount(); 
     Object[][] tableData = new Object[nRow][nCol]; 
     for (int i = 0; i < nRow; i++) { 
      for (int j = 0; j < nCol; j++) { 
       tableData[i][j] = dtm.getValueAt(i, j); 
      } 
     } 
     return tableData; 
    } 

private void jTextField2KeyReleased(java.awt.event.KeyEvent evt) {           
     // TODO add your handling code here: 

     DefaultTableModel newTableModel = new DefaultTableModel(); 
     String lookFor = this.jTextField2.getText(); 

     Object[][] td = getTableData(this.myTable); 

     int rows = td.length; 
     for (int i = 0; i < rows; i++) { 
      String brand = (String) td[0][0]; 
      String model = (String) td[0][1]; 
      String serialNumber = (String) td[0][2]; 
      String date = (String) td[0][3]; 
      String firstname = (String) td[0][4]; 
      String lastname = (String) td[0][5]; 
      String desc = (String) td[0][6]; 

      if (brand.contains(lookFor) || model.contains(lookFor) || serialNumber.contains(lookFor) || date.contains(lookFor) 
        || firstname.contains(lookFor) || lastname.contains(lookFor) || desc.contains(lookFor)); 
      newTableModel.addRow(new Object[]{brand, model, serialNumber, date, firstname, lastname, desc}); 

     } 

     this.myTable.setModel(newTableModel); 
    } 

回答

3

聽起來就像你想做表格過濾。

閱讀Swing教程Sorting and Filtering中的部分,該示例將過濾在文本字段中輸入文本時顯示的行。

1

我試過了你的代碼,你忘了做的是爲新模型設置列。您必須做

newTableModel.setColumnCount(7) 

newTableModel.setColumnIdentifiers(new String[] { ... }); 

只有當你這樣做,你會看到什麼新的數據看起來像已經顯示錶。