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

使用单元格呈现程序后禁用行选择功能

  •  2
  • dierre  · 技术社区  · 14 年前

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

    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 回复  |  直到 14 年前
        1
  •  4
  •   Jan Thomä    14 年前

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

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

    我从我的一个listcellrenders中获取了这个,但我认为它与tablecellrenders的工作原理相同。

    顺便说一下,您可以重用文本字段,不需要为每个单元格创建新的文本字段,因此您可以将文本字段设置为类的成员,在方法中只需更改文本字段中的内容/颜色并返回它。这样就不会在一个大表上有一百万个textfield实例。