java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.JScrollPane
public class JScrollPane
提供轻量级组件的 scrollable 视图。JScrollPane
管理视口、可选的垂直和水平滚动条以及可选的行和列标题视口。有关 JScrollPane
的面向任务的文档,请参阅 The Java Tutorial 中的 How to Use Scroll Panes 一节。注意,JScrollPane
不支持重量级组件。
|
JViewport
为数据源提供一个窗口或“视口”,例如,一个文本文件。该数据源为由
JViewport
视图显示的“scrollable 客户端”(即数据模型)。
JScrollPane
基本上由
JScrollBar
、一个
JViewport
以及它们之间的连线组成,如右图所示。
除了滚动条和视口之外,JScrollPane
也可以有一个列标题和一个行标题。这二者都是 JViewport
对象,可用 setRowHeaderView
和 setColumnHeaderView
指定。列标题视口自动左右滚动,跟踪主视口的左右滚动。(但是它不会垂直滚动。)行标题的滚动方式与此类似。
在两个滚动条的交汇处、行标题与列标题的交汇处,或者滚动条与其中一个标题的交汇处,两个组件在很接近角的地方停止,留下一个默认情况下为空的矩形空间。四个角都有可能存在这些空间。在上图中,右上角存在该空间,由标签“角组件”标识。
可使用 setCorner
方法替换许多的这些空白空间,以便将组件添加到一个特定角。(注:相同的组件不能添加到多个角。)如果想要为滚动窗格增加一些额外的装饰或功能,那么此方法很有用。每个角组件的大小都完全由标题和/或包围它的滚动条的大小确定。
只有角组件存在于其中的角中有空白空间时该角组件才是可见的。例如,设想一个设置在滚动窗格(带有列标题)右上角的组件。如果滚动窗格的垂直滚动条不存在(可能因为视图组件尚未大到需要它的地步),那么该角组件将不会显示(因为标题和垂直滚动条的交汇点所创建的角中没有空白空间)。要强制使滚动条始终显示,可使用 setVerticalScrollBarPolicy(VERTICAL_SCROLLBAR_ALWAYS)
确保该角组件的空间始终存在。
要围绕主视口添加一个边界,可使用 setViewportBorder
。(当然,也可以使用 setBorder
围绕整个滚动窗格添加一个边界。)
应该执行的一个常见操作是设置背景颜色,此颜色可在主视口小于视口或透明时使用。使用 scrollPane.getViewport().setBackground()
设置视口的背景色可实现此目的。设置视口而不是滚动窗格的颜色的原因是,默认情况下,JViewport
为不透明,还有一些其他属性,这意味着它将用其背景色完全填充背景。因此当 JScrollPane
绘制其背景时,视口通常将在它上面绘制。
默认情况下,JScrollPane
使用 ScrollPaneLayout
处理其子组件的布局。ScrollPaneLayout
使用以下两个方法之一确定视口视图的大小:
Scrollable
,将使用 getPreferredScrollableViewportSize
、getScrollableTracksViewportWidth
和 getScrollableTracksViewportHeight
的组合,否则使用 getPreferredSize
。 警告:Swing 不是线程安全的。有关更多信息,请参阅 Swing's Threading Policy。
警告:此类的序列化对象与以后的 Swing 版本不兼容。当前序列化支持适用于短期存储,或适用于在运行相同 Swing 版本的应用程序之间进行 RMI(Remote Method Invocation,远程方法调用)。从 1.4 版本开始,已在 java.beans
包中添加了支持所有 JavaBeansTM 长期存储的功能。请参见 XMLEncoder
。
JScrollBar
,
JViewport
,
ScrollPaneLayout
,
Scrollable
,
Component.getPreferredSize()
,
setViewportView(java.awt.Component)
,
setRowHeaderView(java.awt.Component)
,
setColumnHeaderView(java.awt.Component)
,
setCorner(java.lang.String, java.awt.Component)
,
setViewportBorder(javax.swing.border.Border)
嵌套类摘要 | |
---|---|
protected class |
JScrollPane.AccessibleJScrollPane 此类实现 JScrollPane 类的可访问性支持。 |
protected class |
JScrollPane.ScrollBar 默认情况下, JScrollPane 创建的滚动条为此类的实例。 |
从类 javax.swing.JComponent 继承的嵌套类/接口 |
---|
JComponent.AccessibleJComponent |
从类 java.awt.Container 继承的嵌套类/接口 |
---|
Container.AccessibleAWTContainer |
从类 java.awt.Component 继承的嵌套类/接口 |
---|
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy |
字段摘要 | |
---|---|
protected JViewport |
columnHeader 列标题子级。 |
protected JScrollBar |
horizontalScrollBar 滚动窗格的水平滚动条子级。 |
protected int |
horizontalScrollBarPolicy 用于水平滚动条的显示策略。 |
protected Component |
lowerLeft 在左下角显示的组件。 |
protected Component |
lowerRight 在右下角显示的组件。 |
protected JViewport |
rowHeader 行标题子级。 |
protected Component |
upperLeft 在左上角显示的组件。 |
protected Component |
upperRight 在右上角显示的组件。 |
protected JScrollBar |
verticalScrollBar 滚动窗格的垂直滚动条子级。 |
protected int |
verticalScrollBarPolicy 用于垂直滚动条的显示策略。 |
protected JViewport |
viewport 滚动窗格的视口子级。 |
从类 javax.swing.JComponent 继承的字段 |
---|
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW |
从类 java.awt.Component 继承的字段 |
---|
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT |
从接口 java.awt.image.ImageObserver 继承的字段 |
---|
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH |
构造方法摘要 | |
---|---|
JScrollPane() 创建一个空的(无视口的视图) JScrollPane ,需要时水平和垂直滚动条都可显示。 |
|
JScrollPane(Component view) 创建一个显示指定组件内容的 JScrollPane ,只要组件的内容超过视图大小就会显示水平和垂直滚动条。 |
|
JScrollPane(Component view, int vsbPolicy, int hsbPolicy) 创建一个 JScrollPane ,它将视图组件显示在一个视口中,视图位置可使用一对滚动条控制。 |
|
JScrollPane(int vsbPolicy, int hsbPolicy) 创建一个具有指定滚动条策略的空(无视口的视图) JScrollPane 。 |
方法摘要 | |
---|---|
JScrollBar |
createHorizontalScrollBar() 默认返回 JScrollPane.ScrollBar 。 |
JScrollBar |
createVerticalScrollBar() 默认返回 JScrollPane.ScrollBar 。 |
protected JViewport |
createViewport() 默认返回新的 JViewport 。 |
AccessibleContext |
getAccessibleContext() 获取与此 JScrollPane 相关联的 AccessibleContext。 |
JViewport |
getColumnHeader() 返回列标题。 |
Component |
getCorner(String key) 返回位于指定角的组件。 |
JScrollBar |
getHorizontalScrollBar() 返回控制视口的水平视图位置的水平滚动条。 |
int |
getHorizontalScrollBarPolicy() 返回水平滚动条策略值。 |
JViewport |
getRowHeader() 返回行标题。 |
ScrollPaneUI |
getUI() 返回呈现此组件的外观 (L&F) 对象。 |
String |
getUIClassID() 返回用于构造呈现此组件时所用 L&F 类的名称的后缀。 |
JScrollBar |
getVerticalScrollBar() 返回控制视口垂直视图位置的垂直滚动条。 |
int |
getVerticalScrollBarPolicy() 返回垂直滚动条策略值。 |
JViewport |
getViewport() 返回当前的 JViewport 。 |
Border |
getViewportBorder() 返回围绕该视口的 Border 对象。 |
Rectangle |
getViewportBorderBounds() 返回视口边界的范围。 |
boolean |
isValidateRoot() 重写以返回 true,这样任何在此 JScrollPane 的任何后代上对 revalidate 的调用将使从此 JScrollPane 开始的整个树接受验证。 |
boolean |
isWheelScrollingEnabled() 指示是否进行滚动以响应鼠标滚轮。 |
protected String |
paramString() 返回此 JScrollPane 的字符串表示形式。 |
void |
setColumnHeader(JViewport columnHeader) 移除旧的 columnHeader,如果有的话;如果新的 columnHeader 不为 null ,将其 viewPosition 的 x 坐标与视口(如果有)同步然后将其添加到滚动窗格。 |
void |
setColumnHeaderView(Component view) 创建一个列标题视口(如果有必要),设置其视图然后将此列标题视口添加到滚动窗格。 |
void |
setComponentOrientation(ComponentOrientation co) 设置由 ComponentOrientation 参数确定的垂直和水平滚动条方向。 |
void |
setCorner(String key, Component corner) 添加一个将显示在一个滚动窗格角中的子级,如果有空间的话。 |
void |
setHorizontalScrollBar(JScrollBar horizontalScrollBar) 将控制视口水平视图位置的水平滚动条添加到滚动窗格中。 |
void |
setHorizontalScrollBarPolicy(int policy) 确定水平滚动条何时显示在滚动窗格上。 |
void |
setLayout(LayoutManager layout) 设置此 JScrollPane 的布局管理器。 |
void |
setRowHeader(JViewport rowHeader) 移除旧的 rowHeader,如果存在;如果新的 rowHeader 不为 null ,将其 viewPosition 的 y 坐标与视口(如果有)同步然后将其添加到滚动窗格。 |
void |
setRowHeaderView(Component view) 创建一个行标题视口(如果有必要),设置其视图然后将此行标题视口添加到滚动窗格。 |
void |
setUI(ScrollPaneUI ui) 设置 ScrollPaneUI 对象,它为此组件提供外观 (L&F)。 |
void |
setVerticalScrollBar(JScrollBar verticalScrollBar) 将控制视口垂直视图位置的滚动条添加到滚动窗格中。 |
void |
setVerticalScrollBarPolicy(int policy) 确定垂直滚动条何时显示在滚动窗格上。 |
void |
setViewport(JViewport viewport) 移除旧视口(如果有);强制新视口的 viewPosition 位于 +x,+y 象限中;将行和列标题(如果有)与新视口同步;最后将滚动条和标题与新视口同步。 |
void |
setViewportBorder(Border viewportBorder) 围绕视口添加一个边界。 |
void |
setViewportView(Component view) 创建一个视口(如果有必要)并设置其视图。 |
void |
setWheelScrollingEnabled(boolean handleWheel) 启用/禁用对鼠标滚轮滚动的移动响应。 |
void |
updateUI() 用一个来自当前默认外观的 ScrollPaneUI 替换当前的 ScrollPaneUI 对象。 |