0

我的问题是我想更改 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;
    }
}
4

1 回答 1

2

单元格渲染发生得非常频繁。您不想在渲染过程中执行 SQL 调用。此外,您应该在 SQLException 发生时记录它,而不是默默地吞下它。

在这种情况下,您将结果集作为字段存储在单元格渲染器中。第一次渲染时,迭代到结果集的末尾。

value使用传递给渲染器的参数,而不是查询状态。这将是正在渲染的单元格中的值。如果您需要其他单元格的值,请从 TableModel 中获取。

于 2013-09-30T17:44:16.817 回答