使用单元格渲染器后禁用行选择功能

时间:2010-11-23 09:27:27

标签: swing jtable tablecellrenderer

我很谨慎做错事。我的猜测是组件,但这是问题所在。 这是我的单元格渲染器:

public class WildcardCellRenderer implements TableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {

        JTextField c = new JTextField();
        c.setBorder(javax.swing.BorderFactory.createEmptyBorder());

        if(vColIndex == 2){
            if((Integer)value == 0) c.setText("No") ;
            else c.setText("Si");
        } else c.setText(value.toString());

        return c;
    }

}

这就是我在面板中设置内容的方式:

    this.table.setDefaultRenderer(Object.class, new WildcardCellRenderer() );

问题是,当我设置此渲染器时,行变得无法选择。我应该使用不同的组件来显示我需要显示的内容吗?基本上我将0/1值显示为No / Yes值。

1 个答案:

答案 0 :(得分:4)

您需要考虑“isSelected”值并相应地设置背景颜色,如下所示:

 if (isSelected) {
        c.setBackground(table.getSelectionBackground());
        c.setForeground(table.getSelectionForeground());
    }
    else {
        c.setBackground(table.getBackground());
        c.setForeground(table.getForeground());
    }

我从我的一个ListCellRenderers中获取了这个,但我认为它与TableCellRenderers一样。

哦,顺便说一下,你可以重复使用文本字段,不需要为每个单元格创建一个新的文本字段,这样你就可以使文本字段成为你的类的一个成员,并且在方法内部只需更改文本字段中的内容喜欢内容/颜色并返回它。这样你就不会在一张大桌子上结束一百万个文本字段实例。