--- a/jdk/src/share/classes/javax/swing/JEditorPane.java Wed Apr 21 18:12:21 2010 +0400
+++ b/jdk/src/share/classes/javax/swing/JEditorPane.java Thu Apr 29 18:38:25 2010 +0400
@@ -1330,8 +1330,9 @@
*/
public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
- JViewport port = SwingUtilities.getParentViewport(this);
- if (port != null) {
+ Container parent = SwingUtilities.getUnwrappedParent(this);
+ if (parent instanceof JViewport) {
+ JViewport port = (JViewport) parent;
TextUI ui = getUI();
int prefWidth = d.width;
int prefHeight = d.height;
@@ -1452,8 +1453,9 @@
* match its own, false otherwise
*/
public boolean getScrollableTracksViewportWidth() {
- JViewport port = SwingUtilities.getParentViewport(this);
- if (port != null) {
+ Container parent = SwingUtilities.getUnwrappedParent(this);
+ if (parent instanceof JViewport) {
+ JViewport port = (JViewport) parent;
TextUI ui = getUI();
int w = port.getWidth();
Dimension min = ui.getMinimumSize(this);
@@ -1474,8 +1476,9 @@
* false otherwise
*/
public boolean getScrollableTracksViewportHeight() {
- JViewport port = SwingUtilities.getParentViewport(this);
- if (port != null) {
+ Container parent = SwingUtilities.getUnwrappedParent(this);
+ if (parent instanceof JViewport) {
+ JViewport port = (JViewport) parent;
TextUI ui = getUI();
int h = port.getHeight();
Dimension min = ui.getMinimumSize(this);
--- a/jdk/src/share/classes/javax/swing/JList.java Wed Apr 21 18:12:21 2010 +0400
+++ b/jdk/src/share/classes/javax/swing/JList.java Thu Apr 29 18:38:25 2010 +0400
@@ -25,17 +25,7 @@
package javax.swing;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.GraphicsEnvironment;
-import java.awt.HeadlessException;
-import java.awt.Insets;
-import java.awt.Point;
-import java.awt.Rectangle;
+import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
@@ -2779,9 +2769,9 @@
getVisibleRowCount() <= 0) {
return true;
}
- JViewport port = SwingUtilities.getParentViewport(this);
- if (port != null) {
- return port.getWidth() > getPreferredSize().width;
+ Container parent = SwingUtilities.getUnwrappedParent(this);
+ if (parent instanceof JViewport) {
+ return parent.getWidth() > getPreferredSize().width;
}
return false;
}
@@ -2805,9 +2795,9 @@
getVisibleRowCount() <= 0) {
return true;
}
- JViewport port = SwingUtilities.getParentViewport(this);
- if (port != null) {
- return port.getHeight() > getPreferredSize().height;
+ Container parent = SwingUtilities.getUnwrappedParent(this);
+ if (parent instanceof JViewport) {
+ return parent.getHeight() > getPreferredSize().height;
}
return false;
}
--- a/jdk/src/share/classes/javax/swing/JTable.java Wed Apr 21 18:12:21 2010 +0400
+++ b/jdk/src/share/classes/javax/swing/JTable.java Thu Apr 29 18:38:25 2010 +0400
@@ -719,8 +719,9 @@
* @see #addNotify
*/
protected void configureEnclosingScrollPane() {
- JViewport port = SwingUtilities.getParentViewport(this);
- if (port != null) {
+ Container parent = SwingUtilities.getUnwrappedParent(this);
+ if (parent instanceof JViewport) {
+ JViewport port = (JViewport) parent;
Container gp = port.getParent();
if (gp instanceof JScrollPane) {
JScrollPane scrollPane = (JScrollPane)gp;
@@ -752,8 +753,9 @@
* from configureEnclosingScrollPane() and updateUI() in a safe manor.
*/
private void configureEnclosingScrollPaneUI() {
- JViewport port = SwingUtilities.getParentViewport(this);
- if (port != null) {
+ Container parent = SwingUtilities.getUnwrappedParent(this);
+ if (parent instanceof JViewport) {
+ JViewport port = (JViewport) parent;
Container gp = port.getParent();
if (gp instanceof JScrollPane) {
JScrollPane scrollPane = (JScrollPane)gp;
@@ -822,8 +824,9 @@
* @since 1.3
*/
protected void unconfigureEnclosingScrollPane() {
- JViewport port = SwingUtilities.getParentViewport(this);
- if (port != null) {
+ Container parent = SwingUtilities.getUnwrappedParent(this);
+ if (parent instanceof JViewport) {
+ JViewport port = (JViewport) parent;
Container gp = port.getParent();
if (gp instanceof JScrollPane) {
JScrollPane scrollPane = (JScrollPane)gp;
@@ -5217,10 +5220,10 @@
* @see #getFillsViewportHeight
*/
public boolean getScrollableTracksViewportHeight() {
- JViewport port = SwingUtilities.getParentViewport(this);
+ Container parent = SwingUtilities.getUnwrappedParent(this);
return getFillsViewportHeight()
- && port != null
- && port.getHeight() > getPreferredSize().height;
+ && parent instanceof JViewport
+ && parent.getHeight() > getPreferredSize().height;
}
/**
--- a/jdk/src/share/classes/javax/swing/JTextField.java Wed Apr 21 18:12:21 2010 +0400
+++ b/jdk/src/share/classes/javax/swing/JTextField.java Thu Apr 29 18:38:25 2010 +0400
@@ -292,7 +292,7 @@
*/
@Override
public boolean isValidateRoot() {
- return SwingUtilities.getParentViewport(this) == null;
+ return !(SwingUtilities.getUnwrappedParent(this) instanceof JViewport);
}
--- a/jdk/src/share/classes/javax/swing/JTree.java Wed Apr 21 18:12:21 2010 +0400
+++ b/jdk/src/share/classes/javax/swing/JTree.java Thu Apr 29 18:38:25 2010 +0400
@@ -3498,9 +3498,9 @@
* @see Scrollable#getScrollableTracksViewportWidth
*/
public boolean getScrollableTracksViewportWidth() {
- JViewport port = SwingUtilities.getParentViewport(this);
- if (port != null) {
- return port.getWidth() > getPreferredSize().width;
+ Container parent = SwingUtilities.getUnwrappedParent(this);
+ if (parent instanceof JViewport) {
+ return parent.getWidth() > getPreferredSize().width;
}
return false;
}
@@ -3515,9 +3515,9 @@
* @see Scrollable#getScrollableTracksViewportHeight
*/
public boolean getScrollableTracksViewportHeight() {
- JViewport port = SwingUtilities.getParentViewport(this);
- if (port != null) {
- return port.getHeight() > getPreferredSize().height;
+ Container parent = SwingUtilities.getUnwrappedParent(this);
+ if (parent instanceof JViewport) {
+ return parent.getHeight() > getPreferredSize().height;
}
return false;
}
--- a/jdk/src/share/classes/javax/swing/SwingUtilities.java Wed Apr 21 18:12:21 2010 +0400
+++ b/jdk/src/share/classes/javax/swing/SwingUtilities.java Thu Apr 29 18:38:25 2010 +0400
@@ -1969,58 +1969,53 @@
}
/**
- * Looks for the first ancestor of the {@code component}
+ * Returns the first ancestor of the {@code component}
* which is not an instance of {@link JLayer}.
- * If this ancestor is an instance of {@code JViewport},
- * this {@code JViewport} is returned, otherwise returns {@code null}.
- * The following way of obtaining the parent {@code JViewport}
- * is not recommended any more:
- * <pre>
- * JViewport port = null;
- * Container parent = component.getParent();
- * // not recommended any more
- * if(parent instanceof JViewport) {
- * port = (JViewport) parent;
- * }
- * </pre>
- * Here is the way to go:
- * <pre>
- * // the correct way:
- * JViewport port = SwingUtilities.getParentViewport(component);
- * </pre>
- * @param component {@code Component} to get the parent {@code JViewport} of.
- * @return the {@code JViewport} instance for the {@code component}
- * or {@code null}
+ *
+ * @param component {@code Component} to get
+ * the first ancestor of, which is not a {@link JLayer} instance.
+ *
+ * @return the first ancestor of the {@code component}
+ * which is not an instance of {@link JLayer}.
+ * If such an ancestor can not be found, {@code null} is returned.
+ *
* @throws NullPointerException if {@code component} is {@code null}
+ * @see JLayer
*
* @since 1.7
*/
- public static JViewport getParentViewport(Component component) {
- do {
- component = component.getParent();
- if (component instanceof JViewport) {
- return (JViewport) component;
- }
- } while(component instanceof JLayer);
- return null;
+ public static Container getUnwrappedParent(Component component) {
+ Container parent = component.getParent();
+ while(parent instanceof JLayer) {
+ parent = parent.getParent();
+ }
+ return parent;
}
/**
* Returns the first {@code JViewport}'s descendant
- * which is not an instance of {@code JLayer} or {@code null}.
+ * which is not an instance of {@code JLayer}.
+ * If such a descendant can not be found, {@code null} is returned.
*
* If the {@code viewport}'s view component is not a {@code JLayer},
- * this method is equal to {@link JViewport#getView()}
- * otherwise {@link JLayer#getView()} will be recursively tested
+ * this method is equivalent to {@link JViewport#getView()}
+ * otherwise {@link JLayer#getView()} will be recursively
+ * called on all descending {@code JLayer}s.
+ *
+ * @param viewport {@code JViewport} to get the first descendant of,
+ * which in not a {@code JLayer} instance.
*
* @return the first {@code JViewport}'s descendant
- * which is not an instance of {@code JLayer} or {@code null}.
+ * which is not an instance of {@code JLayer}.
+ * If such a descendant can not be found, {@code null} is returned.
*
* @throws NullPointerException if {@code viewport} is {@code null}
* @see JViewport#getView()
* @see JLayer
+ *
+ * @since 1.7
*/
- static Component getUnwrappedView(JViewport viewport) {
+ public static Component getUnwrappedView(JViewport viewport) {
Component view = viewport.getView();
while (view instanceof JLayer) {
view = ((JLayer)view).getView();
--- a/jdk/src/share/classes/javax/swing/text/JTextComponent.java Wed Apr 21 18:12:21 2010 +0400
+++ b/jdk/src/share/classes/javax/swing/text/JTextComponent.java Thu Apr 29 18:38:25 2010 +0400
@@ -2069,9 +2069,9 @@
* width to match its own
*/
public boolean getScrollableTracksViewportWidth() {
- JViewport port = SwingUtilities.getParentViewport(this);
- if (port != null) {
- return port.getWidth() > getPreferredSize().width;
+ Container parent = SwingUtilities.getUnwrappedParent(this);
+ if (parent instanceof JViewport) {
+ return parent.getWidth() > getPreferredSize().width;
}
return false;
}
@@ -2090,9 +2090,9 @@
* to match its own
*/
public boolean getScrollableTracksViewportHeight() {
- JViewport port = SwingUtilities.getParentViewport(this);
- if (port != null) {
- return (port.getHeight() > getPreferredSize().height);
+ Container parent = SwingUtilities.getUnwrappedParent(this);
+ if (parent instanceof JViewport) {
+ return parent.getHeight() > getPreferredSize().height;
}
return false;
}