summaryrefslogtreecommitdiff
path: root/javax/swing/plaf
diff options
context:
space:
mode:
authorRoman Kennke <roman@kennke.org>2006-09-19 09:14:23 +0000
committerRoman Kennke <roman@kennke.org>2006-09-19 09:14:23 +0000
commit518898f15ef2c92c7d0a401a723b6eaa6c2b0713 (patch)
treeb9a96a473f03c0384ca9b35224076860d315874c /javax/swing/plaf
parente26c7eca660fddf5b235b5ca436fc6f3da36c202 (diff)
downloadclasspath-518898f15ef2c92c7d0a401a723b6eaa6c2b0713.tar.gz
2006-09-19 Roman Kennke <kennke@aicas.com>
* javax/swing/plaf/basic/BasicScrollPaneUI.java (HSBChangeListener.stateChanged): Moved handling of header to syncScrollPaneWithViewport(). (VSBChangeListener.stateChanged): Moved handling of header to syncScrollPaneWithViewport(). (ViewportChangedHandler.stateChanged): Removed unused statements. (syncScrollPaneWithViewport): Added null checks. Use setValues rather then the single setter methods to avoid multiple adjustments and side effects. Also snyc the headers here. (updateScrollBarDisplayPolicy): Revalidate and repaint here. (uninstallUI): Removed unnecessary cast and this qualifier as well as the call to super.
Diffstat (limited to 'javax/swing/plaf')
-rw-r--r--javax/swing/plaf/basic/BasicScrollPaneUI.java79
1 files changed, 48 insertions, 31 deletions
diff --git a/javax/swing/plaf/basic/BasicScrollPaneUI.java b/javax/swing/plaf/basic/BasicScrollPaneUI.java
index 69e352711..452cc5ec9 100644
--- a/javax/swing/plaf/basic/BasicScrollPaneUI.java
+++ b/javax/swing/plaf/basic/BasicScrollPaneUI.java
@@ -108,12 +108,6 @@ public class BasicScrollPaneUI extends ScrollPaneUI
viewPosition.x = xpos;
vp.setViewPosition(viewPosition);
}
-
- viewPosition.y = 0;
- JViewport columnHeader = scrollpane.getColumnHeader();
- if (columnHeader != null
- && !columnHeader.getViewPosition().equals(viewPosition))
- columnHeader.setViewPosition(viewPosition);
}
}
@@ -144,12 +138,6 @@ public class BasicScrollPaneUI extends ScrollPaneUI
viewPosition.y = ypos;
vp.setViewPosition(viewPosition);
}
-
- viewPosition.x = 0;
- JViewport rowHeader = scrollpane.getRowHeader();
- if (rowHeader != null
- && !rowHeader.getViewPosition().equals(viewPosition))
- rowHeader.setViewPosition(viewPosition);
}
}
@@ -173,9 +161,6 @@ public class BasicScrollPaneUI extends ScrollPaneUI
*/
public void stateChanged(ChangeEvent event)
{
- JViewport vp = scrollpane.getViewport();
- JScrollBar hsb = scrollpane.getHorizontalScrollBar();
- JScrollBar vsb = scrollpane.getVerticalScrollBar();
syncScrollPaneWithViewport();
}
@@ -778,8 +763,8 @@ public class BasicScrollPaneUI extends ScrollPaneUI
public void uninstallUI(final JComponent c)
{
super.uninstallUI(c);
- this.uninstallDefaults((JScrollPane) c);
- uninstallListeners((JScrollPane) c);
+ uninstallDefaults((JScrollPane) c);
+ uninstallListeners(c);
installKeyboardActions((JScrollPane) c);
}
@@ -815,7 +800,7 @@ public class BasicScrollPaneUI extends ScrollPaneUI
}
public void paint(Graphics g, JComponent c)
- {
+ {
Border vpBorder = scrollpane.getViewportBorder();
if (vpBorder != null)
{
@@ -825,23 +810,54 @@ public class BasicScrollPaneUI extends ScrollPaneUI
}
/**
- * Synchronizes the scrollbars with the viewport's extents.
+ * Synchronizes the scrollbar and header settings positions and extent
+ * with the viewport's view position and extent.
*/
protected void syncScrollPaneWithViewport()
{
JViewport vp = scrollpane.getViewport();
- // Update the horizontal scrollbar.
- JScrollBar hsb = scrollpane.getHorizontalScrollBar();
- hsb.setMaximum(vp.getViewSize().width);
- hsb.setValue(vp.getViewPosition().x);
- hsb.setVisibleAmount(vp.getExtentSize().width);
-
- // Update the vertical scrollbar.
- JScrollBar vsb = scrollpane.getVerticalScrollBar();
- vsb.setMaximum(vp.getViewSize().height);
- vsb.setValue(vp.getViewPosition().y);
- vsb.setVisibleAmount(vp.getExtentSize().height);
+ if (vp != null)
+ {
+ Dimension extentSize = vp.getExtentSize();
+ Rectangle viewBounds = vp.getViewRect();
+
+ // Update the vertical scrollbar.
+ JScrollBar vsb = scrollpane.getVerticalScrollBar();
+ if (vsb != null)
+ {
+ int extent = extentSize.height;
+ int max = viewBounds.height;
+ vsb.setValues(Math.max(0, Math.min(viewBounds.y, max - extent)),
+ extent, 0, max);
+ }
+
+ // Update the horizontal scrollbar.
+ JScrollBar hsb = scrollpane.getHorizontalScrollBar();
+ if (hsb != null)
+ {
+ int extent = extentSize.width;
+ int max = viewBounds.width;
+ vsb.setValues(Math.max(0, Math.min(viewBounds.x, max - extent)),
+ extent, 0, max);
+ }
+
+ // Update the row header.
+ JViewport rowHeader = scrollpane.getRowHeader();
+ if (rowHeader != null)
+ {
+ Point p = new Point(0, viewBounds.y);
+ rowHeader.setViewPosition(p);
+ }
+
+ // Update the column header.
+ JViewport colHeader = scrollpane.getColumnHeader();
+ if (colHeader != null)
+ {
+ Point p = new Point(viewBounds.x, 0);
+ colHeader.setViewPosition(p);
+ }
+ }
}
/**
@@ -874,7 +890,8 @@ public class BasicScrollPaneUI extends ScrollPaneUI
*/
protected void updateScrollBarDisplayPolicy(PropertyChangeEvent ev)
{
- // TODO: Find out what should be done here. Or is this only a hook?
+ scrollpane.revalidate();
+ scrollpane.repaint();
}
/**