Java JTable change cell color

后端 未结 7 1539
说谎
说谎 2020-11-30 14:14

I would like to make an editable table and then check the data to make sure its valid. Im not sure how to change the color of just one cell. I would like to get a cell, for

7条回答
  •  臣服心动
    2020-11-30 14:18

    Say that the cell you would like to render with a different color represents a status (I'll take Rejected and Approved as examples). I'd then implement a method in my table model called getStatus(int row) which returns the status for any given row.

    Then, when that is in place, I'd go about creating a cell renderer responsible for rendering the column which the cell belongs to. The cell renderer would be something in the lines of the below code.

    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;
    
    }
    

    Then, when the renderer is in place, simply "apply" the renderer to the table with the following piece of code:

    Table.getColumnModel().getColumn(columnIndex).setCellRenderer(new StatusColumnCellRenderer());
    

    With regard to making a cell editable, simply implement the isCellEditable(int rowIndex, int columnIndex) method in your table model. You also need to implement the method setValueAt(Object value, int rowIndex, int columnIndex) if you would like to keep the value which the user provides (which i assume you do!).

提交回复
热议问题