我有一个自定义单元格渲染器,供单元格进行自动换行,以便可以读取更多内容。这是代码:
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中选择一行时,它只显示非自定义渲染单元格的突出显示。突出显示该行的所有其他单元格。这只剩下一个带有白色背景的单元格,而行的其余部分则为蓝色(在我的情况下)作为突出显示的背景颜色。
答案 0 :(得分: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;
}
答案 1 :(得分:3)
我认为你应该首先调用默认实现:
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
...
默认实现将处理所有常用参数,例如isSelected
和hasFocus
,设置文本和背景颜色,激活焦点边框等。然后您将更改显示的文本,更改单元格大小和return this
。
答案 2 :(得分:-1)
使用setSelectionColor(Color.GREEN);你告诉用户选择什么是绿色。你的问题是什么以及你希望你的代码做什么?