diff options
author | Mark Wielaard <mark@gcc.gnu.org> | 2005-11-15 23:20:01 +0000 |
---|---|---|
committer | Mark Wielaard <mark@gcc.gnu.org> | 2005-11-15 23:20:01 +0000 |
commit | 8f523f3a1047919d3563daf1ef47ba87336ebe89 (patch) | |
tree | a5eb7cf42a51869cc8aa1fad7ad6a90cca47fdd8 /libjava/classpath/javax/swing/table | |
parent | 02e549bfaaec38f68307e7f34e46ea57ea1809af (diff) | |
download | gcc-8f523f3a1047919d3563daf1ef47ba87336ebe89.tar.gz |
Imported GNU Classpath 0.19 + gcj-import-20051115.
* sources.am: Regenerated.
* Makefile.in: Likewise.
* scripts/makemake.tcl: Use glob -nocomplain.
From-SVN: r107049
Diffstat (limited to 'libjava/classpath/javax/swing/table')
4 files changed, 149 insertions, 23 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; } diff --git a/libjava/classpath/javax/swing/table/JTableHeader.java b/libjava/classpath/javax/swing/table/JTableHeader.java index 45586da2009..163509a45c2 100644 --- a/libjava/classpath/javax/swing/table/JTableHeader.java +++ b/libjava/classpath/javax/swing/table/JTableHeader.java @@ -61,9 +61,14 @@ import javax.accessibility.AccessibleValue; import javax.swing.JComponent; import javax.swing.JTable; import javax.swing.UIManager; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.TableColumnModelEvent; +import javax.swing.event.TableColumnModelListener; import javax.swing.plaf.TableHeaderUI; public class JTableHeader extends JComponent + implements TableColumnModelListener, Accessible { protected class AccessibleJTableHeader extends AccessibleJComponent { @@ -305,11 +310,6 @@ public class JTableHeader extends JComponent private static final long serialVersionUID = 5144633983372967710L; /** - * The accessibleContext property. - */ - AccessibleContext accessibleContext; - - /** * The columnModel property. */ protected TableColumnModel columnModel; @@ -373,17 +373,8 @@ public class JTableHeader extends JComponent */ public JTableHeader(TableColumnModel cm) { - accessibleContext = new AccessibleJTableHeader(); columnModel = cm == null ? createDefaultColumnModel() : cm; - draggedColumn = null; - draggedDistance = 0; - opaque = true; - reorderingAllowed = true; - resizingAllowed = true; - resizingColumn = null; - table = null; - updateTableInRealTime = true; - cellRenderer = createDefaultRenderer(); + initializeLocalVars(); updateUI(); } @@ -504,7 +495,9 @@ public class JTableHeader extends JComponent */ public void setColumnModel(TableColumnModel c) { + columnModel.removeColumnModelListener(this); columnModel = c; + columnModel.addColumnModelListener(this); } /** @@ -619,7 +612,7 @@ public class JTableHeader extends JComponent public Rectangle getHeaderRect(int column) { - Rectangle r = getTable().getCellRect(-1, column, true); + Rectangle r = getTable().getCellRect(-1, column, false); r.height = getHeight(); return r; } @@ -665,4 +658,88 @@ public class JTableHeader extends JComponent return -1; } + + /** + * Receives notification when a column is added to the column model. + * + * @param event the table column model event + */ + public void columnAdded(TableColumnModelEvent event) + { + // TODO: What else to do here (if anything)? + resizeAndRepaint(); + } + + /** + * Receives notification when a column margin changes in the column model. + * + * @param event the table column model event + */ + public void columnMarginChanged(ChangeEvent event) + { + // TODO: What else to do here (if anything)? + resizeAndRepaint(); + } + + /** + * Receives notification when a column is moved within the column model. + * + * @param event the table column model event + */ + public void columnMoved(TableColumnModelEvent event) + { + // TODO: What else to do here (if anything)? + resizeAndRepaint(); + } + + /** + * Receives notification when a column is removed from the column model. + * + * @param event the table column model event + */ + public void columnRemoved(TableColumnModelEvent event) + { + // TODO: What else to do here (if anything)? + resizeAndRepaint(); + } + + /** + * Receives notification when the column selection has changed. + * + * @param event the table column model event + */ + public void columnSelectionChanged(ListSelectionEvent event) + { + // TODO: What else to do here (if anything)? + resizeAndRepaint(); + } + + /** + * Validates the layout of this table header and repaints it. This is + * equivalent to <code>revalidate()</code> followed by + * <code>repaint()</code>. + */ + public void resizeAndRepaint() + { + revalidate(); + repaint(); + } + + /** + * Initializes the fields and properties of this class with default values. + * This is called by the constructors. + */ + protected void initializeLocalVars() + { + accessibleContext = new AccessibleJTableHeader(); + draggedColumn = null; + draggedDistance = 0; + opaque = true; + reorderingAllowed = true; + resizingAllowed = true; + resizingColumn = null; + table = null; + updateTableInRealTime = true; + cellRenderer = createDefaultRenderer(); + } } diff --git a/libjava/classpath/javax/swing/table/TableColumn.java b/libjava/classpath/javax/swing/table/TableColumn.java index 9c36bb05ab0..9f06c5b7fcc 100644 --- a/libjava/classpath/javax/swing/table/TableColumn.java +++ b/libjava/classpath/javax/swing/table/TableColumn.java @@ -402,7 +402,11 @@ public class TableColumn if (width == oldWidth) return; - firePropertyChange(COLUMN_WIDTH_PROPERTY, oldWidth, width); + // We do have a constant field COLUMN_WIDTH_PROPERTY, + // however, tests show that the actual fired property name is 'width' + // and even Sun's API docs say that this constant field is obsolete and + // not used. + firePropertyChange("width", oldWidth, width); } /** @@ -422,12 +426,16 @@ public class TableColumn */ public void setPreferredWidth(int preferredWidth) { + int oldPrefWidth = this.preferredWidth; + if (preferredWidth < minWidth) this.preferredWidth = minWidth; else if (preferredWidth > maxWidth) this.preferredWidth = maxWidth; else this.preferredWidth = preferredWidth; + + firePropertyChange("preferredWidth", oldPrefWidth, this.preferredWidth); } /** diff --git a/libjava/classpath/javax/swing/table/TableColumnModel.java b/libjava/classpath/javax/swing/table/TableColumnModel.java index 76a145604db..b006f9ad4bb 100644 --- a/libjava/classpath/javax/swing/table/TableColumnModel.java +++ b/libjava/classpath/javax/swing/table/TableColumnModel.java @@ -50,6 +50,7 @@ import javax.swing.event.TableColumnModelListener; * * @author Andrew Selkirk */ +// FIXME: The API documentation in this class is incomplete. public interface TableColumnModel { /** @@ -107,7 +108,7 @@ public interface TableColumnModel * @throws IllegalArgumentException if <code>identifier</code> is * <code>null</code> or there is no column with that identifier. */ - int getColumnIndex(Object columnIdentifier); + int getColumnIndex(Object identifier); /** * Returns the <code>TableColumn</code> at the specified index. @@ -169,7 +170,6 @@ public interface TableColumnModel /** * getSelectionModel - * @param column TableColumn */ ListSelectionModel getSelectionModel(); |