代码之家  ›  专栏  ›  技术社区  ›  sebamed

删除或隐藏单元格中的值

  •  0
  • sebamed  · 技术社区  · 7 年前

    有没有办法隐藏或删除某个单元格或整列的值? 如果你看这张照片:

    Table image

    您将看到,在向表中添加模拟数据时,我非常有创意。

    撇开所有笑话不谈,我想删除优先级列中的所有值,所以只有彩色单元格。有可能吗?可能会遍历整个列并将值设置为null?只是一个没有实现计划的想法。。。

    编辑

    我的单元格渲染器:

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
            int row, int column) {
        Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    
        if(value.equals("1")) { // red
            cell.setBackground(Color.RED);
            cell.setForeground(Color.WHITE);
        } else if (value.equals("2")) { // yellow
            cell.setBackground(Color.ORANGE);
            cell.setForeground(Color.WHITE);
        } else if (value.equals("3")) { // green
            cell.setBackground(Color.GREEN);
            cell.setForeground(Color.WHITE);
        } else { // white
            cell.setBackground(Color.WHITE);
            cell.setForeground(Color.GRAY);
        }
    
        return cell;
    }
    

    为表指定渲染器:

    TableColumn tblColumn = this.tblTodo.getColumnModel().getColumn(1);
        tblColumn.setCellRenderer(new PriorityColumnCellRenderer());
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Hovercraft Full Of Eels    7 年前

    您只需更改 value 在渲染器的 getTableCellRendererComponent(...) 方法为空字符串: "" :

    Component cell = super.getTableCellRendererComponent(table, "", isSelected, 
            hasFocus, row, column);
    

    例如。,

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
            int row, int column) {
        Component cell = super.getTableCellRendererComponent(table, "", isSelected, 
            hasFocus, row, column);
    
        if(value.equals("1")) { // red
            cell.setBackground(Color.RED);
            cell.setForeground(Color.WHITE);
        } else if (value.equals("2")) { // yellow
            cell.setBackground(Color.ORANGE);
            cell.setForeground(Color.WHITE);
        } else if (value.equals("3")) { // green
            cell.setBackground(Color.GREEN);
            cell.setForeground(Color.WHITE);
        } else { // white
            cell.setBackground(Color.WHITE);
            cell.setForeground(Color.GRAY);
        }
        return cell;
    }
    
        2
  •  0
  •   sebamed    7 年前

    找到了答案。

    super的类中有一个方法:

    super.setValue("myValue");
    

    在我的情况下,如下所示:

    super.setValue(null);
    

    但需要在检查值后调用此函数。最终代码:

    编辑

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
            int row, int column) {
        Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    
        if(value.equals("1")) { // red
            cell.setBackground(Color.RED);
            cell.setForeground(Color.WHITE);
            super.setValue(null);
        } else if (value.equals("2")) { // yellow
            cell.setBackground(Color.ORANGE);
            cell.setForeground(Color.WHITE);
            super.setValue(null);
        } else if (value.equals("3")) { // green
            cell.setBackground(Color.GREEN);
            cell.setForeground(Color.WHITE);
            super.setValue(null);
        } else { // white
            cell.setBackground(Color.WHITE);
            cell.setForeground(Color.GRAY);
            super.setValue(null);
        }
    
        return cell;
    }
    

    编辑

    为了保持简单,我使用 Hovercraft Full Of Eels 我的回答是