diff options
Diffstat (limited to 'libjava/classpath/javax/swing/table/DefaultTableCellRenderer.java')
-rw-r--r-- | libjava/classpath/javax/swing/table/DefaultTableCellRenderer.java | 49 |
1 files changed, 45 insertions, 4 deletions
diff --git a/libjava/classpath/javax/swing/table/DefaultTableCellRenderer.java b/libjava/classpath/javax/swing/table/DefaultTableCellRenderer.java index 349f4baad12..a187d74a686 100644 --- a/libjava/classpath/javax/swing/table/DefaultTableCellRenderer.java +++ b/libjava/classpath/javax/swing/table/DefaultTableCellRenderer.java @@ -43,8 +43,10 @@ import java.awt.Component; import java.awt.Rectangle; import java.io.Serializable; +import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JTable; +import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; import javax.swing.JTextField; @@ -64,10 +66,21 @@ public class DefaultTableCellRenderer extends JLabel { public UIResource() { + super(); } } /** + * Stores the color set by setForeground(). + */ + Color foreground; + + /** + * Stores the color set by setBackground(). + */ + Color background; + + /** * Creates a default table cell renderer with an empty border. */ public DefaultTableCellRenderer() @@ -83,6 +96,7 @@ public class DefaultTableCellRenderer extends JLabel public void setForeground(Color c) { super.setForeground(c); + foreground = c; } /** @@ -93,6 +107,7 @@ public class DefaultTableCellRenderer extends JLabel public void setBackground(Color c) { super.setBackground(c); + background = c; } /** @@ -104,6 +119,8 @@ public class DefaultTableCellRenderer extends JLabel public void updateUI() { super.updateUI(); + background = null; + foreground = null; } /** @@ -137,17 +154,41 @@ public class DefaultTableCellRenderer extends JLabel if (isSelected) { - setBackground(table.getSelectionBackground()); - setForeground(table.getSelectionForeground()); + super.setBackground(table.getSelectionBackground()); + super.setForeground(table.getSelectionForeground()); } else { - setBackground(table.getBackground()); - setForeground(table.getForeground()); + if (background != null) + super.setBackground(background); + else + super.setBackground(table.getBackground()); + if (foreground != null) + super.setForeground(foreground); + else + super.setForeground(table.getForeground()); } + if (hasFocus) + { + 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; } |