Index: javax/swing/table/DefaultTableCellRenderer.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/table/DefaultTableCellRenderer.java,v retrieving revision 1.20 retrieving revision 1.22 diff -u -r1.20 -r1.22 --- javax/swing/table/DefaultTableCellRenderer.java 3 Nov 2005 22:26:10 -0000 1.20 +++ javax/swing/table/DefaultTableCellRenderer.java 4 Nov 2005 15:10:20 -0000 1.22 @@ -50,7 +50,6 @@ import javax.swing.border.Border; import javax.swing.border.EmptyBorder; import javax.swing.JTextField; -import javax.swing.plaf.ColorUIResource; /** * Class to display every cells. @@ -120,6 +119,8 @@ public void updateUI() { super.updateUI(); + background = null; + foreground = null; } /** @@ -153,29 +154,41 @@ if (isSelected) { - setBackground(table.getSelectionBackground()); - setForeground(table.getSelectionForeground()); + super.setBackground(table.getSelectionBackground()); + super.setForeground(table.getSelectionForeground()); } else { if (background != null) - setBackground(background); + super.setBackground(background); else - setBackground(table.getBackground()); + super.setBackground(table.getBackground()); if (foreground != null) - setForeground(foreground); + super.setForeground(foreground); else - setForeground(table.getForeground()); + super.setForeground(table.getForeground()); } if (hasFocus) - setBorder(UIManager.getBorder("Table.focusCellHighlightBorder")); + { + setBorder(UIManager.getBorder("Table.focusCellHighlightBorder")); + if (table.isCellEditable(row, column)) + { + super.setBackground(UIManager.getColor("Table.focusCellBackground")); + super.setForeground(UIManager.getColor("Table.focusCellForeground")); + } + } else setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); setEnabled(table.isEnabled()); setFont(table.getFont()); + // If the current background is equal to the table's background, then we + // can avoid filling the background by setting the renderer opaque. + Color back = getBackground(); + setOpaque(back != null && back.equals(table.getBackground())); + return this; }