为什么选择行/单元格时,我的Java自定义单元格渲染器不会显示突出显示?

我有一个自定义单元格渲染器为单元格做一个单词包装,所以更多的内容可以读取.这是代码
import java.awt.Color;
import java.awt.Component;
import java.awt.Insets;

import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.TableCellRenderer;

public class textwrapCellRenderer extends JTextArea implements TableCellRenderer {
    private static final long serialVersionUID = 1L;

    public textwrapCellRenderer() {
        setLineWrap(true);
        setWrapStyleWord(true);
        setMargin(new Insets(0,5,5));
        setSelectionColor(Color.GREEN);
    }

    public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column) {
        setText((String)value);
        setSize(table.getColumnModel().getColumn(column).getWidth(),getPreferredSize().height);
        setSelectionColor(Color.GREEN);

        return this;
    }
}

更新:单元格渲染器正确使用,但当用户在JTable中选择一行时,它仅显示自定义渲染单元格的突出显示.高亮显示为该行的所有其他单元格.这只留下一个白色背景的单元格,而其余的单元格具有蓝色(在我的情况下)作为突出显示的背景颜色.

解决方法

您必须检查isSelected参数以查看单元格是否被选择,类似于:
public Component getTableCellRendererComponent(JTable table,int column) 
{
        setText((String)value);
        setSize(table.getColumnModel().getColumn(column).getWidth(),getPreferredSize().height);
        setSelectionColor(Color.GREEN);

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

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...