2013-01-13 3 views
5

다음은 table_job을 통해 필터링하여 키워드와 일치하는 행을 찾는 데 사용되는 try 블록입니다. 그러나 테이블 모델이 변경되면 올바른 행 인덱스를 얻으려고 애 쓰고 있습니다. 필터링 된 결과가 첫 번째가 아닌 행을 표시하더라도 항상 첫 번째 행을 선택합니다.JTable 필터링 후 행 번호

난 당신이 fireTableDataChanged()으로 뭔가를 할 수 이해하지만, 나는 trycatch 블록 또는 . JLabel

try 
{ 
    sql = "SELECT Job.jobID as 'Job ID', Employer.name as'Company', Job.title as 'Role', Job.description as 'Description', Job.type as 'Type', Job.benefits as 'Benefits', Job.closing as 'Closing Date' FROM Job INNER JOIN Employer ON Job.employerID=Employer.employerID ORDER BY Employer.name"; 
    pst = conn.prepareStatement(sql); 
    rs = pst.executeQuery(); 
    TableModel model = DbUtils.resultSetToTableModel(rs); 
    table_job.setModel(model); 
    final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); 
    table_job.setRowSorter(sorter);    
    searchJob.addActionListener(new ActionListener() 
    { 

     public void actionPerformed(ActionEvent e) 
     { 
      String text = keyword.getText(); 
      if (text.length() == 0) 
      { 
       sorter.setRowFilter(null); 
      } 
      else 
      { 
       sorter.setRowFilter(RowFilter.regexFilter(text)); 
      } 
     }    
    }); 
} 
catch (Exception e) 
{ 
    e.printStackTrace();     
} 

private void setLabelText() 
{ 
    try 
    { 
     String table_click0 = (table_job.getModel().getValueAt(
       row, 0).toString()); 
     String sqlSt = "SELECT Employer.name, * FROM Job INNER JOIN Employer ON Job.employerID = Employer.employerID WHERE jobID='"+table_click0+"' "; 
     //rest of code to Label text... 
    } 
와 테이블의 내용을 표시하는 setLabelText() 방법으로,이 작업을 수행하는 방법 및 WHERE 확실하지 않다

String table_click0 = (table_job.getModel().getValueAt(row, 0).toString());은 업데이트 된 선택된 행이 아니라 잘못된 행을 선택합니다. 어떻게 이것을 고려할 수 있습니까?

+1

1) 1 개 라인은 충분하다! 2) 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오 (DB를 제외하고 일부 데이터를 하드 코딩하십시오). 3) 여기에는 [convertRowIndexToModel (int viewRowIndex)']가 필요합니다 (http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html#convertRowIndexToModel%28int%29). –

+0

[JTable # convertRowIndexToModel] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html#convertRowIndexToModel (int))을 보길 원합니다. [테이블, 정렬 및 필터링 사용 방법] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting) – MadProgrammer

+0

을 통해 읽으십시오. @MadProgrammer @Andrew - 고마워, 내가 인수로 무엇을 전달해야합니까. 왜냐하면'table_job.convertRowIndexToModel();'만이 유효하지 않기 때문에'setLabelText()'또는 try catch 블록에 있어야한다. – Hoody

답변

9

convertRowIndexToModel을 사용하여 row 값이 "보기"관점에서 검색되는 경우 "행"값을 모델 색인 값으로 변환해야 할 수 있습니다. 그래서 단지와

String table_click0 = (table_job.getModel().getValueAt(row, 0).toString()); 

을 대체

String table_click0 = table_job.getModel().getValueAt(table_job. 
          convertRowIndexToModel(row), 0).toString()); 
0

빠른 수정 : 필터링 된 목록에서 실제 행을 가져 오는 방법을 코드에서 공백

int row=getjTable().getSelectedRow(); 
if (getjTable().getRowSorter()!=null) { 
    row = getjTable().getRowSorter().convertRowIndexToModel(row); 
}