10

我有一个用于单元格的自定义单元格渲染器来进行自动换行,以便可以阅读更多内容。这是代码:

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, 0, 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 中选择一行时,它只显示非自定义渲染单元格的突出显示。但是,突出显示该行的所有其他单元格。这仅留下一个具有白色背景的单元格,而该行的其余部分具有蓝色(在我的情况下)作为突出显示的背景颜色。

4

3 回答 3

13

您必须检查isSelected参数以查看是否选择了单元格,例如:

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);

        if (isSelected)
        {
            setBackground(table.getSelectionBackground());
            setForeground(table.getSelectionForeground());
        }
        else
        {
            setBackground(table.getBackground());
            setForeground(table.getForeground());
        }
        return this;
    }
于 2011-04-05T20:34:16.617 回答
3

我认为您应该首先调用默认实现:

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

默认实现将处理所有常用参数,例如isSelectedand hasFocus,设置文本和背景颜色,激活焦点边框等。然后您将更改显示的文本,更改单元格大小和return this

于 2011-04-05T20:22:46.603 回答
-1

使用 setSelectionColor(Color.GREEN); 您正在告诉用户选择的内容是绿色的。你的问题是什么,你希望你的代码做什么?

于 2011-04-05T19:41:10.607 回答