Java JTable改变单元格颜色

Mat*_*att 11 java swing jtable colors

我想制作一个可编辑的表,然后检查数据以确保其有效.我不知道如何改变一个细胞的颜色.我想获得一个单元格,例如(0,0)并将前景颜色设置为红色.我已经阅读了SO以及Oracle关于自定义ColorRenderer的其他帖子,但我只是不知道如何使用它.

谢谢.

sbr*_*tla 18

假设您要使用不同颜色渲染的单元格表示状态(我将以"拒绝和已批准"为例).然后我在我的表模型中实现一个名为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;

}
Run Code Online (Sandbox Code Playgroud)

然后,当渲染器到位时,只需使用以下代码"将"渲染器"应用"到表中:

Table.getColumnModel().getColumn(columnIndex).setCellRenderer(new StatusColumnCellRenderer());
Run Code Online (Sandbox Code Playgroud)

关于使单元格可编辑,只需在表模型中实现isCellEditable(int rowIndex,int columnIndex)方法即可.如果你想保留用户提供的值(我假设你这样做了!),你还需要实现方法 setValueAt(Object value,int rowIndex,int columnIndex).