2012-03-29 83 views
0

我有一個JFrame和一個JPanel裏面。該面板顯示在運行時從網絡接收的圖像。這些圖像通常很大,但可以有任何大小。考慮到這一點,並考慮到我可能會在未來添加一個菜單欄框架,我想要執行以下操作:擺動:關於調整JFrames和有條件滾動的大小

  • 對於每個接收到的圖像,面板調整爲其確切大小。
  • 如果圖像(因此調整大小的面板)超過了寬度或高度的某個最大值(例如:屏幕大小 - 100px),則框架應調整爲允許的最大值並啓用滾動條。
  • 否則,框架應該調整其大小以顯示整個面板而沒有任何填充。因此,框架大小是內容面板的大小加上邊框和標題欄(如果我最終添加它,還有菜單欄)。

有沒有辦法做到這一點?如果不是,那麼最好的選擇是什麼?

在此先感謝

編輯:

的問題,總結,是如何調整父框架,以適應其子內容面板。這與大多數人所做的相反(調整面板以適應框架)。

對於點#3,我已經有內容面板的尺寸,所以問題被減少到計算幀的大小(頂部標題欄高度,邊框寬度)。有了這個,我可以調整框架的大小,例如內容窗格恰好位於內部。

+0

答案聽起來很規範的行爲,這有什麼錯包()? – kleopatra 2012-03-29 12:01:21

+0

@kleopatra不知道原因,但不起作用。以最小尺寸啓動框架,然後在收到圖像時調整面板大小。在這一點上,如果我打電話給打包,那麼框架不會改變其大小。 – 2012-03-29 12:03:18

+0

調整任何東西都不是你的工作,它是LayoutManager的工作:讓面板根據圖像大小決定它的prefSize,讓它在接收一個新圖像時重新驗證自己,然後在框架上調用pack - workformealways(從我的頂部頭,沒有IDE方便) – kleopatra 2012-03-29 12:21:36

回答

2

編輯

put images as Icon to the JLabel 

pictures = new ImageIcon("Xxxxx"); 
pictures.getImage().flush(); 
myLabel.setIcon(pictures); 
  • 這段代碼也應更好地從SwingWorker打電話,或者從Runnable#Thread,但在這種情況下,你必須包裝的代碼行myLabel.setIcon(pictures);分成invokeLater(),

  • 更多關於鞦韆教程併發性SwingWorkerinvokeLater(),一堆關於併發性在這個論壇

+0

感謝您的建議,但我不想調整圖像大小。這些應以全尺寸顯示。我需要的是啓用滾動或不取決於圖像大小和總顯示大小。 – 2012-03-29 09:00:55

+0

@Mister Smith請參閱我的編輯 – mKorbel 2012-03-29 09:52:48

+0

Swing的設計不太好以至於很容易實現,而很多人選擇使用圖像圖標破解。 – 2012-03-29 10:25:23

相關問題