根据型号值隐藏JTable中的单个单元格

时间:2013-03-03 15:26:25

标签: java swing jtable tablecellrenderer abstracttablemodel

我有一个JTable显示来自允许整数值0,1和2的模型的值。这些值显示在9乘9网格中(如数独游戏板)。

我的问题是:如何隐藏GUI中的零值?

也就是说,在模型值为零的表格单元格中,我不希望GUI显示任何值。但是,由于计算完成,模型必须包含零值。

我尝试使用DefaultTableCellRenderer并使用setVisible(true)将单元格组件设置为不可见(如this question中所示),但我没有得到任何结果。

我设法使用DefaultTableCellRenderer来切换任何单元格的背景颜色,具体取决于模型状态(如果单元格被视为“负面”)。 我确实希望保持背景颜色可见

我对java有点新,所以这可能只是一个更新问题?

这是我的DefaultTableCellRenderer:

private static class GameTableRenderer extends DefaultTableCellRenderer
{
    private static final long serialVersionUID = 1L;

    @Override
    public Component getTableCellRendererComponent(
        JTable table, Object value, boolean isSelected,
        boolean hasFocus, int row, int column)
    {
        Component c = super.getTableCellRendererComponent(
            table, value, isSelected, hasFocus, row, column);

        GameModel model = (GameModel) table.getModel();

        if(model.isNegative(row, column))
            c.setBackground(Color.lightGray);
        else
            c.setBackground(Color.white);

        if(model.getAbsoluteValueAt(row, column) == 0)
            c.setVisible(false);
        else
            c.setVisible(true);

        return c;
    }
}

“getAbsoluteValueAt”方法返回0,1或2的整数。背景颜色的变化完全正常。

我的模型扩展了AbstractTableModel,JTable使用这样的渲染器:

table.setDefaultRenderer(int.class, renderer);

我希望这些信息足以解释我的问题以及我迄今所做的努力。请索取更多信息,我会提供。

提前谢谢你。 /弗雷德里克

2 个答案:

答案 0 :(得分:4)

或者您可以使用以下内容:

 if(model.getAbsoluteValueAt(row, column) == 0)
        c.setForeground(c.getBackground());
    else
        c.setForeground(Color.BLACK);

答案 1 :(得分:3)

不是让组件不可见,而是将其文本设置为空字符串:

if (model.getAbsoluteValueAt(row, column) == 0) {
    ((JLabel) c).setText("");
}