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

您必须检查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; } 

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

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

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

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