2

我很清楚做错了什么。我的猜测是组件,但这是问题所在。这是我的单元格渲染器:

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 值。

4

1 回答 1

4

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

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

我从我的一个 ListCellRenderers 中获取了这个,但我认为它与 TableCellRenderers 的工作方式相同。

哦,顺便说一句,您可以重用文本字段,无需为每个单元格创建新的文本字段,因此您可以使文本字段成为您的类的成员,并且在方法内部只需更改文本字段中的内容/颜色并返回。这样你就不会在一张大表上得到一百万个文本字段实例。

于 2010-11-23T09:32:05.147 回答