This patch implements the getMinimumSize and getMaximumSize methods in
BasicTableUI, essentially fixing bug PR swing/23204 where table columns
weren't being automatically resized. I have not yet closed this bug
because changes need to be made (most likely in ViewportLayout) to allow
JTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF) to disable column
autoresizing. Once this is done I will consider this bug fixed and
close it.
The patch is attached.
2005-08-31 Anthony Balkissoon <[EMAIL PROTECTED]>
* javax/swing/JTable.java:
(initializeLocalVars): Changed default autoResizeMode to
AUTO_RESIZE_SUBSEQUENT_COLUMNS to match the JDK.
* javax/swing/plaf/basic/BasicTableUI.java:
(getMaximumSize): Implemented.
(getMinimumSize): Implemented.
--Tony
Index: javax/swing/JTable.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/JTable.java,v
retrieving revision 1.43
diff -u -r1.43 JTable.java
--- javax/swing/JTable.java 12 Aug 2005 20:45:17 -0000 1.43
+++ javax/swing/JTable.java 31 Aug 2005 18:52:08 -0000
@@ -673,7 +673,7 @@
this.defaultEditorsByColumnClass = new Hashtable();
createDefaultEditors();
- this.autoResizeMode = AUTO_RESIZE_ALL_COLUMNS;
+ this.autoResizeMode = AUTO_RESIZE_SUBSEQUENT_COLUMNS;
this.rowHeight = 16;
this.rowMargin = 1;
this.rowSelectionAllowed = true;
Index: javax/swing/plaf/basic/BasicTableUI.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicTableUI.java,v
retrieving revision 1.24
diff -u -r1.24 BasicTableUI.java
--- javax/swing/plaf/basic/BasicTableUI.java 16 Aug 2005 18:07:50 -0000 1.24
+++ javax/swing/plaf/basic/BasicTableUI.java 31 Aug 2005 18:52:08 -0000
@@ -206,14 +206,44 @@
return new MouseInputHandler();
}
+ /**
+ * Return the maximum size of the table. The maximum height is the row
+ * height times the number of rows. The maximum width is the sum of
+ * the maximum widths of each column.
+ *
+ * @param comp the component whose maximum size is being queried,
+ * this is ignored.
+ * @return a Dimension object representing the maximum size of the table,
+ * or null if the table has no elements.
+ */
public Dimension getMaximumSize(JComponent comp)
{
- return getPreferredSize(comp);
+ int maxTotalColumnWidth = 0;
+ for (int i = 0; i < table.getColumnCount(); i++)
+ maxTotalColumnWidth += table.getColumnModel().getColumn(i).getMaxWidth();
+ if (maxTotalColumnWidth == 0 || table.getRowCount() == 0)
+ return null;
+ return new Dimension(maxTotalColumnWidth, table.getRowCount()*table.getRowHeight());
}
+ /**
+ * Return the minimum size of the table. The minimum height is the row
+ * height times the number of rows. The minimum width is the sum of
+ * the minimum widths of each column.
+ *
+ * @param comp the component whose minimum size is being queried,
+ * this is ignored.
+ * @return a Dimension object representing the minimum size of the table,
+ * or null if the table has no elements.
+ */
public Dimension getMinimumSize(JComponent comp)
{
- return getPreferredSize(comp);
+ int minTotalColumnWidth = 0;
+ for (int i = 0; i < table.getColumnCount(); i++)
+ minTotalColumnWidth += table.getColumnModel().getColumn(i).getMinWidth();
+ if (minTotalColumnWidth == 0 || table.getRowCount() == 0)
+ return null;
+ return new Dimension(minTotalColumnWidth, table.getRowCount()*table.getRowHeight());
}
public Dimension getPreferredSize(JComponent comp)
@@ -355,7 +385,7 @@
{
ListSelectionModel rowModel = table.getSelectionModel();
ListSelectionModel colModel = table.getColumnModel().getSelectionModel();
-
+
int rowLead = rowModel.getLeadSelectionIndex();
int rowMax = table.getModel().getRowCount() - 1;
_______________________________________________
Classpath-patches mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/classpath-patches