我创建了一个Jtable.这个表由两列名称和时间戳组成。如果名字是"简",我想使行的颜色变黄。以下是该代码:-
class CustomRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
String name = table.getModel().getValueAt(row, 0).toString();
if (name.trim().equals("jane")) {
c.setBackground(Color.YELLOW);
}
return c;
}
}
但是,它不是将特定名称的行颜色更改为黄色,而是更改每行的颜色。我正在设置表格的数据如下
tableModelName = (DefaultTableModel)jTableName.getModel();
jTableName.setDefaultRenderer(Object.class,new CustomRenderer());
for(int i=0; i<records.size(); i++)
{
tableModelName.addRow(records.get(i));
}
我做错了什么?
如果
名称不是"jane",则需要一个else
子句将背景颜色设置为黄色以外的颜色。单个渲染器实例用于所有渲染,因此一旦在该实例上将颜色设置为黄色,它将保持黄色。
看看 JTable 源代码,看看内置渲染器是如何工作的:
if (isSelected) {
setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground());
}
else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}
为了更简单的方法,您可以尝试子类化JTable并覆盖prepareRenderer。这对于影响此类整行的更改非常方便,因此您可以对单个单元格使用自定义呈现器,并在 prepareRenderer
方法中调整行的所有呈现器。