JScrollPane類可提供輕量級組件的 scrollable 視圖。JScrollPane 管理視口、可選的垂直和水平滾動條以及可選的行和列標題視口。有關 JScrollPane 的面向任務的文檔,請參閱 The Java Tutorial 中的 How to Use Scroll Panes 一節。注意,JScrollPane 不支持重量級組件。
基本介紹
- 中文名:Java容器類
- 外文名:JScrollPane
- 定義:Java GUI工具包中的一個容器類
- 所屬包:javax.swing
介紹
javax.swing 類 JScrollPane
java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.JScrollPane
- 所有已實現的接口:
- ImageObserver, MenuContainer, Serializable, Accessible, ScrollPaneConstants
JViewport 為數據源提供一個視窗或“視口”,例如,一個文本檔案。該數據源為由 JViewport 視圖顯示的“scrollable 客戶端”(即數據模型)。JScrollPane 基本上由 JScrollBar、一個 JViewport 以及它們之間的連線組成,如右圖所示。
在兩個滾動條的交匯處、行標題與列標題的交匯處,或者滾動條與其中一個標題的交匯處,兩個組件在很接近角的地方停止,留下一個默認情況下為空的矩形空間。四個角都有可能存在這些空間。在上圖中,右上角存在該空間,由標籤“角組件”標識。
可使用 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 包中添加了支持所有 JavaBeans 長期存儲的功能。請參見 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)