JScollPane以及JPanel相關(guān)
最近就遇到一個(gè)問(wèn)題:
因?yàn)橐谝粋€(gè)jpanel里面顯示一幅圖片,但是圖片的實(shí)際大小,我們知道是不相同的.當(dāng)然有一種方式可以解決完全顯示的問(wèn)題.那就是利用畫(huà)圖函數(shù)強(qiáng)制指定區(qū)域大小.
但是,明顯,當(dāng)我們需要實(shí)際顯示圖片大小時(shí),上述方法就不適用了.
JPanel是一個(gè)比較特殊的組件,當(dāng)我們把他添加到一個(gè)container里面后,它會(huì)自動(dòng)調(diào)整顯示大小,以配合container的大小,所以如果圖片大大小超過(guò)container的大小,那么在jpanel中顯示的始終只是可見(jiàn)的那部分,而不會(huì)是像預(yù)測(cè)的那樣出現(xiàn)滾動(dòng)條..
因此,解決問(wèn)題的關(guān)鍵就到了,如何改變jpanel的大小.這里要指出,setBounds等函數(shù)是徒勞的.
下面給出一個(gè)完整片段:
JScrollPane jp=new
JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
jp.setViewportView(iPanel);
以上兩句是創(chuàng)建一個(gè)滾動(dòng)窗口,并把一個(gè)panel加入其中并始終顯示橫豎滾動(dòng)條.
下一步,就是調(diào)整panel的大小,以使?jié)L動(dòng)條真正的能工作起來(lái).
iPanel.setPreferredSize(new
Dimension(3000,2000));
iPanel.revalidate();
最好每次重繪之前,預(yù)先設(shè)置一下ipanel大小,然后調(diào)用revalidate更新.
這樣,就容易的實(shí)現(xiàn)了滾動(dòng)屏.對(duì)于其他的組件,是不需要上面那些步驟的,原因就是上面提過(guò)的那個(gè)jpanel會(huì)自適應(yīng)的屬性.