2013-09-30 112 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中獲取它。