2012-04-23 40 views
1

如何一個JLabelJButton通知JScrollPane該視圖大小已改變(例如,當一個圖標已被設置),所以它能夠確定顯示滾動條是否是必要的?JLabel或JButton如何告訴JScrollPane視圖大小已更改?

我怎麼能實現類似的行爲,以顯示與一個簡單的JPanel的圖像而不訴諸aforementionned組件?

P.S:我已經通過源代碼看去,到目前爲止我看到的是一個組件被稱爲「視圖」和被傳遞到一個或JViewJViewport哪些寄存器一些聽衆。從那裏起,事情似乎不清楚。

+2

爲了更好地幫助更早編輯您的問題與[SSCCE](http://sscce.org/) – mKorbel 2012-04-23 09:20:27

+0

@mKorbel:很想,但這可能需要一個圖像文件來演示使用setIcon和使用paint再加上一組組件的維度。 – 2012-04-23 09:26:01

+1

@JamesPoulson圖像可以是1)從JRE獲得2)從互聯網熱連接3)在代碼中生成。從記憶中,技術2和3在SSCCE文件中被提及。 – 2012-04-23 09:45:02

回答

4

由於JScrollPane API中指出,除非你改變政策「水平和垂直滾動條出現只要組件的內容超過視圖大小。」一旦已經pack()尺寸的Window「以適應首選大小和其子組件的佈局,」任何後續變化由滾動窗格可見,當容器被驗證,並重新繪製。有關更多信息,請參閱Painting in AWT and Swing

+0

好的。我必須在這裏錯過一些東西。我已經將JLabel設置爲viewPortView,並試圖設置它的尺寸而不設置它的圖標。這似乎並沒有引發對這個觀點的調整。是否打電話給您提到的其中一種方法?當文檔中提到「只要組件的內容大於視圖,就會出現水平和垂直滾動條。」這是否意味着更改取決於JLabel的內容? – 2012-04-23 09:39:31

+2

更改內容後,調用'revalidate()'和'repaint()'可能是合適的。滾動窗格將看到新的幾何圖形。 – trashgod 2012-04-23 09:57:07

+0

我會測試的方法。如果他們工作,我懷疑有一些電話正在從Icon中傳播出去。 – 2012-04-25 12:16:36