2013-03-16 54 views
1

我有一個NetBeans IDE 的桌面應用程序,該應用程序有一個JTable,它顯示來自lucene搜索操作的 數據。替換jtable的內容

任何時候進行新的搜索, 該表將新搜索結果追加到 之前的搜索結果中。我想要的是 要使用新的搜索結果替換任何正在退出的 搜索結果。以 爲單詞對錶進行刷新並顯示新的 搜索結果。

可用

這種任何建議是數據模型

public class MyTableModel extends AbstractTableModel { 

    private Vector<Vector<String>> dataList = new Vector<>(); 
    private String[] header = { "ID","SUBJECT","LETTTER FROM","LETTER DATE","DATE RECEIED", 
            "REMARKS","DATE DISPATCHED","DESTINATION OFFICE"}; 



    public Vector<Vector<String>> getDataList() { 
     return dataList; 
    } 

    public void setDataList(Vector<Vector<String>> dataList) {  
     this.dataList = dataList; 
     fireTableDataChanged(); 
    } 

    public void setHeader(String[] header) { 
     this.header = header; 
    } 

    public String[] getHeader() { 
     return header; 
    } 

    @Override 
    public int getRowCount() { 
     return dataList.size(); 
    } 

    @Override 
    public int getColumnCount() { 
     return header.length; 
    } 

    @Override 
    public String getColumnName(int col) { 
    return header[col]; 
    } 

    @Override 
    public Object getValueAt(int row, int col) { 
    return dataList.get(row).get(col); 
    } 

} 

此代碼將搜索結果的數據模型類的代碼片段

private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) {            
    try { 

     searchField = searchTextField.getText(); 
     if(!searchField.isEmpty()) 
     {     
     matrix = dbs.searchDatabase(searchField + "*"); 
     myModel.setDataList(matrix); 

     } 

    } catch (CorruptIndexException ex) { 
     Logger.getLogger(GNSSJFrame.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (LockObtainFailedException ex) { 
     Logger.getLogger(GNSSJFrame.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException | ParseException ex) { 
     Logger.getLogger(GNSSJFrame.class.getName()).log(Level.SEVERE, null, ex); 
    }    
} 
+2

請發佈一部分的密碼 – Sach 2013-03-16 13:55:54

+0

事先做一次模型刷新。 – skuntsel 2013-03-16 14:00:12

+0

你使用了什麼模型? – Sach 2013-03-16 14:09:38

回答

4

如果您的表模型是這樣,

class AllTableModel extends AbstractTableModel { 

    // Suppose this is the data list table is using, 
    List<TableData> tableData = new ArrayList<TableData>(); 

    // Override methods goes here. 

    public void setTableData(List<TableData> tableData) { 
     this.tableData = tableData; 
     fireTableDataChanged(); 
} 
} 

現在,使用表模型實例將新數據設置爲列表。

allTableModel.setTableData(/* Set new search results to the list.*/); 
+0

表模型應該真正封裝,併發射適當的事件。 – 2013-03-16 14:25:18

+1

是的,好多了。我寧願如果它做了一個列表的防禦副本,但這是一個實現細節。 +1。 – 2013-03-16 14:33:24

+0

和或與StructureChanged(關於列模型),但取決於,注意自定義渲染器和編輯器可以在數據和結構更改後消失,需要再次添加這些通知器 – mKorbel 2013-03-16 14:37:39