2013-09-30 3 views
0

제 문제는 jTable의 한 열에서 셀의 개별 배경색을 변경하고 싶습니다. 필자가 작성한 코드는 색상을 하나로 변경하고 모든 열에 적용됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?CustomRenderer를 사용하여 jTable 셀 색상을 변경하는 방법

public void fillReserveTable() { 
    MemberDAO dao = DATA.MemberDAO.getInstance(); 
    ResultSet res2 = dao.fillReservationTable(); 
    try { 
     if (res2.next()) { 
      res2.beforeFirst(); 
      reserveTable.setModel(DbUtils.resultSetToTableModel(res2)); 
      setUpOnHold(reserveTable, reserveTable.getColumnModel().getColumn(4)); 
      reserveTable.getColumnModel().getColumn(3).setCellRenderer(new CustomRenderer()); 
      jScrollPane14.setVisible(true); 
     }else{ 
      jScrollPane14.setVisible(false); 
     } 
    } catch (SQLException e) { 
    } 
} 

class CustomRenderer extends DefaultTableCellRenderer { 

    MemberDAO dao = DATA.MemberDAO.getInstance(); 
    ResultSet res2 = dao.fillReservationTable(); 

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     Component cellComponent = super.getTableCellRendererComponent(reserveTable, value, isSelected, hasFocus, row, column); 
     int row2 = 0; 
     try { 
      while (res2.next()) { 
       String status = reserveTable.getValueAt(row2, 3).toString(); 
       if (status.equals("Available")) { 
        cellComponent.setBackground(Color.green); 
       } else { 
        cellComponent.setBackground(Color.red); 
       } 
       row2++; 
      } 
     } catch (SQLException e) { 
     } 
     return cellComponent; 
    } 
} 

답변

2

셀 렌더링이 매우 자주 발생 내 코드입니다. 렌더링의 일부로 SQL 호출을 실행하지 않으려 고합니다. 또한 자동으로 삼키는 대신 일어날 때 SQLException을 기록해야합니다.

이 경우 결과 집합을 셀 렌더러의 필드로 저장합니다. 처음 렌더링 할 때 결과 집합의 끝까지 반복합니다.

상태를 쿼리하는 대신 렌더러에 전달되는 value 매개 변수를 사용하십시오. 이것은 렌더링되는 셀의 값이됩니다. 다른 셀의 값이 필요하면 TableModel에서 값을 가져옵니다.

관련 문제