This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gui][patch] fixes to 3 of the swing panes
- From: "graydon hoare" <graydon at redhat dot com>
- To: "java-patches.gcc.gnu.org" <java-patches at gcc dot gnu dot org>
- Date: Fri, 16 Jul 2004 17:59:28 -0400
- Subject: [gui][patch] fixes to 3 of the swing panes
- Organization: red hat
hi,
this patch fixes some layout issues in split pane, tabbed pane, and scroll pane.
nothing serious, just interactivity glitches. I've committed it to java-gui-branch.
-graydon
2004-07-16 Graydon Hoare <graydon@redhat.com>
* javax/swing/plaf/basic/BasicSplitPaneUI.java: Minor layout fixes.
* javax/swing/plaf/basic/BasicTabbedPaneUI.java: Likewise.
* javax/swing/ScrollPaneLayout.java: Likewise.
--- javax/swing/ScrollPaneLayout.java 10 Jul 2004 17:53:03 -0000 1.3.18.6
+++ javax/swing/ScrollPaneLayout.java 16 Jul 2004 22:02:31 -0000
@@ -198,6 +198,24 @@
return null;
}
+ private static void maybeSetPreferredSize(JComponent src, Dimension dim)
+ {
+ Dimension tmp = null;
+ if (src != null)
+ tmp = src.getPreferredSize();
+ if (tmp != null)
+ dim.setSize(tmp);
+ }
+
+ private static void maybeSetMinimumSize(JComponent src, Dimension dim)
+ {
+ Dimension tmp = null;
+ if (src != null)
+ tmp = src.getMinimumSize();
+ if (tmp != null)
+ dim.setSize(tmp);
+ }
+
public Dimension preferredLayoutSize(Container parent)
{
if (parent != null && parent instanceof JScrollPane)
@@ -229,27 +247,27 @@
insetsSize.setSize(insets.left + insets.right,
insets.top + insets.bottom);
- if (viewport != null &&
- viewport.getView() != null &&
- viewport.getView() instanceof Scrollable)
+ if (viewport != null)
{
- Scrollable tmp = (Scrollable) viewport.getView();
- viewportSize.setSize(tmp.getPreferredScrollableViewportSize());
- }
- else if (viewport != null && viewport.getPreferredSize() != null)
- viewportSize.setSize(viewport.getPreferredSize());
-
- if (colHead != null && colHead.getPreferredSize() != null)
- columnHeaderSize.setSize(colHead.getPreferredSize());
-
- if (rowHead != null && rowHead.getPreferredSize() != null)
- rowHeaderSize.setSize(rowHead.getPreferredSize());
-
- if (vsb != null && vsb.getPreferredSize() != null)
- verticalScrollBarSize.setSize(vsb.getPreferredSize());
-
- if (hsb != null && hsb.getPreferredSize() != null)
- horizontalScrollBarSize.setSize(hsb.getPreferredSize());
+ Component view = null;
+ Scrollable scr = null;
+ Dimension pref = null;
+
+ view = viewport.getView();
+ if (view != null && view instanceof Scrollable)
+ scr = (Scrollable) view;
+ if (scr != null)
+ pref = scr.getPreferredScrollableViewportSize();
+ if (pref == null)
+ pref = viewport.getPreferredSize();
+ if (pref != null)
+ viewportSize.setSize(pref);
+ }
+
+ maybeSetPreferredSize(colHead, columnHeaderSize);
+ maybeSetPreferredSize(rowHead, rowHeaderSize);
+ maybeSetPreferredSize(vsb, verticalScrollBarSize);
+ maybeSetPreferredSize(hsb, horizontalScrollBarSize);
return new Dimension(insetsSize.width
+ viewportSize.width
@@ -300,24 +318,15 @@
insetsSize.setSize(insets.left + insets.right,
insets.top + insets.bottom);
- if (viewport != null && viewport.getMinimumSize() != null)
- viewportSize.setSize(viewport.getMinimumSize());
+ maybeSetMinimumSize(viewport, viewportSize);
+ maybeSetMinimumSize(colHead, columnHeaderSize);
+ maybeSetMinimumSize(rowHead, rowHeaderSize);
- if (colHead != null && colHead.getMinimumSize() != null)
- columnHeaderSize.setSize(colHead.getMinimumSize());
+ if (vsbPolicy != VERTICAL_SCROLLBAR_NEVER)
+ maybeSetMinimumSize(vsb, verticalScrollBarSize);
- if (rowHead != null && rowHead.getMinimumSize() != null)
- rowHeaderSize.setSize(rowHead.getMinimumSize());
-
- if (vsb != null
- && vsbPolicy != VERTICAL_SCROLLBAR_NEVER
- && vsb.getMinimumSize() != null)
- verticalScrollBarSize.setSize(vsb.getMinimumSize());
-
- if (hsb != null
- && hsbPolicy != HORIZONTAL_SCROLLBAR_NEVER
- && hsb.getMinimumSize() != null)
- horizontalScrollBarSize.setSize(hsb.getMinimumSize());
+ if (hsbPolicy != HORIZONTAL_SCROLLBAR_NEVER)
+ maybeSetMinimumSize(hsb, horizontalScrollBarSize);
return new Dimension(insetsSize.width
+ viewportSize.width
@@ -425,10 +434,20 @@
rowHead.setBounds(new Rectangle(x1, y2, x2-x1, y3-y2));
if (showVsb)
+ {
+ vsb.setVisible(true);
vsb.setBounds(new Rectangle(x3, y2, x4-x3, y3-y2));
+ }
+ else if (vsb != null)
+ vsb.setVisible(false);
if (showHsb)
+ {
+ hsb.setVisible(true);
hsb.setBounds(new Rectangle(x2, y3, x3-x2, y4-y3));
+ }
+ else if (hsb != null)
+ hsb.setVisible(false);
if (upperLeft != null)
upperLeft.setBounds(new Rectangle(x1, y1, x2-x1, y2-y1));
--- javax/swing/plaf/basic/BasicSplitPaneUI.java 12 Jul 2004 19:52:46 -0000 1.1.26.2
+++ javax/swing/plaf/basic/BasicSplitPaneUI.java 16 Jul 2004 22:02:31 -0000
@@ -133,7 +133,7 @@
throw new IllegalArgumentException("Illegal placement in JSplitPane");
components[i] = component;
resetSizeAt(i);
- layoutContainer(splitPane);
+ splitPane.revalidate();
splitPane.repaint();
}
@@ -1265,11 +1265,9 @@
tmpSizes[1] = layoutManager.getAvailableSize(splitPane.getSize(),
splitPane.getInsets())
- tmpSizes[0] - tmpSizes[1];
- Point p = divider.getLocation();
layoutManager.setSizes(tmpSizes);
- layoutManager.layoutContainer(splitPane);
-
+ splitPane.revalidate();
splitPane.repaint();
}
@@ -1410,7 +1408,7 @@
getSplitPane().setLayout(layoutManager);
// invalidating by itself does not invalidate the layout.
- getSplitPane().invalidate();
+ getSplitPane().revalidate();
}
/**
@@ -1433,7 +1431,7 @@
nonContinuousLayoutDivider.setVisible(true);
nonContinuousLayoutDivider.setBounds(divider.getBounds());
}
- splitPane.invalidate();
+ splitPane.revalidate();
splitPane.repaint();
}
--- javax/swing/plaf/basic/BasicTabbedPaneUI.java 28 Jun 2004 11:19:23 -0000 1.3.16.9
+++ javax/swing/plaf/basic/BasicTabbedPaneUI.java 16 Jul 2004 22:02:31 -0000
@@ -1108,7 +1108,7 @@
{
selectedRun = getRunForTab(tabPane.getTabCount(),
tabPane.getSelectedIndex());
- tabPane.layout();
+ tabPane.revalidate();
tabPane.repaint();
}
}