加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java JTable更改单元格颜色

发布时间:2020-12-14 17:49:24 所属栏目:Java 来源:网络整理
导读:我想做一个可编辑的表,然后检查数据,以确保其有效.我不知道如何改变一个单元格的颜色.我想得到一个单元格,例如(0,0),并将前景颜色变成红色.我已经阅读了SO的其他帖子以及Oracle关于自定义ColorRenderer的其他帖子,但是我不知道如何使用它. 谢谢. 解决方法 说
我想做一个可编辑的表,然后检查数据,以确保其有效.我不知道如何改变一个单元格的颜色.我想得到一个单元格,例如(0,0),并将前景颜色变成红色.我已经阅读了SO的其他帖子以及Oracle关于自定义ColorRenderer的其他帖子,但是我不知道如何使用它.

谢谢.

解决方法

说你想用不同颜色呈现的单元格代表一个状态(我将以“拒绝和批准”为例).然后,我将在我的表模型中实现一个名为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),如果你想保留用户提供的值(我假设你做的)!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读