说你想用不同颜色呈现的单元格代表一个状态(我将以“拒绝和批准”为例).然后,我将在我的表模型中实现一个名为getStatus(int row)的方法,该方法返回任何给定行的状态.
然后,当它到位时,我会去创建一个单元格渲染器,负责渲染单元格所属的列.单元格渲染器将是以下代码的一部分.
public class StatusColumnCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
//Cells are by default rendered as a JLabel.
JLabel l = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
//Get the status for the current row.
CustomTableModel tableModel = (CustomTableModel) table.getModel();
if (tableModel.getStatus(row) == CustomTableModel.APPROVED) {
l.setBackground(Color.GREEN);
} else {
l.setBackground(Color.RED);
}
//Return the JLabel which renders the cell.
return l;
}
然后,当渲染器到位时,只需使用以下代码将渲染器“应用”到表中即可:
Table.getColumnModel().getColumn(columnIndex).setCellRenderer(new StatusColumnCellRenderer());
关于使单元格可编辑,只需在表格模型中实现isCellEditable(int rowIndex,int columnIndex)方法即可.您还需要实现该方法
setValueAt(Object value,int rowIndex,int columnIndex),如果你想保留用户提供的值(我假设你做的)!