2013-03-16 3 views
1

NetBeans IDE으로 데스크탑 응용 프로그램을 가지고 있습니다. 응용 프로그램에 lucene 검색 작업의 데이터가 표시되는 JTable이 있습니다.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

+0

사전에 모델을 새로 고침하십시오. – skuntsel

+0

어떤 모델을 사용하셨습니까? – Sach

답변

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

테이블 모델은 실제로 그것을 캡슐화하고 적절한 이벤트를 발생시킵니다. –

+1

예, 훨씬 좋습니다. 나는 그것이리스트의 방어적인 사본을 만든다면 더 좋겠지 만 그것은 구현 세부 사항이다. +1. –

+0

및 StructChanged (열 모델 정보)에 따라 다르지만 사용자 정의 렌더러 및 편집자가 데이터 및 구조가 변경된 후에 사라질 수 있으므로 해당 알림을 다시 추가해야합니다. – mKorbel