2011-10-04 124 views
0

我有一個JFrame,我堅持一個JPanel來顯示圖像,在這種情況下,1024x1025。我似乎無法找到答案的問題是如何確保我的包含JFrame將顯示整個圖像/ JPanel。我有東西接近這個例子:獲取JFrame包含JPanel

ImagePanel view = new ImagePanel(); //extends JPanel 
JFrame Container = new JFrame(); 
view.setSize(1024, 1025); 
container = new JFrame(winTitle); 
container.setLayout(new BorderLayout()); 
container.setSize(view.getSize()); 
container.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
container.add(view); 
container.setVisible(true); 

這個明顯的問題是,在JFrame的是由底層操作系統的裝飾,所以我不知道有多少像素,使其比JPanel的從尺寸較大系統到系統。就像現在一樣,由於JFrame的設置與JPanel的大小相同,因此圖像在右側和底部被各少數像素切斷。有沒有辦法告訴JFrame讀取它所包含的Jpanel的大小,並使其足夠大以顯示整個JPanel?謝謝!

編輯

上的圖像面板設置首選大小,然後設置容器的大小(不推薦),然後包裝附加給了我,我是想的行爲之後。任何人都可以解釋這裏發生了什麼,我仍然對某些擺動部件的操作順序有些模糊。

+0

*「JPanel進入顯示圖像」*您是否在圖像頂部添加了其他任何東西?如果沒有,把它放入一個'JLabel'的'ImageIcon'中。 –

回答

0

container.add()之後和container.setVisible()之前,添加一個container.pack()

編輯:你也可以在你的BorderLayout的一邊使用Box.createVerticalStrut(int)Box.createHorizontalStrut(int)。這應該強制佈局留下圖像的空間。

+0

這使得所有的窗口都變得很小,而且一旦我填充圖像,它們就不會調整大小。 –

+0

然後在填充圖像後再次調用'pack()'。 – CajunLuke

+0

我需要窗口(JFrame)在圖像填充前是正確的大小。 –

0

您應該將圖像面板添加到JFrame的contentPane。並且您應該在框架上使用pack()以使其具有適當的尺寸。它將採取所需的大小來適應其組件的首選大小。

+0

這使得窗戶很小。 JPanel此時在畫布上沒有繪製圖像。 –

+0

您需要設置封閉JPanel的首選大小,因爲pack會根據組件的首選大小和佈局計算框架的大小。 –

+0

好的,我認爲實際的問題可能是我的Eclipse。但是,這工作,如果我設置我的圖像面板的首選大小,然後setSize()容器然後pac()k它的作品。如果我在兩者上設置首選,則由於某種原因使框架變小。 –

0

如果您確定圖像分辨率,那麼對於JFrame和JPanel使用setPreferredSize(new Dimension(1024, 1025))。由於默認情況下JFrame使用BorderLayout,因此您無需指定container.setLayout(new BorderLayout());

+0

不幸的是,這樣做使得JFrame由於某種原因變得很小。我認爲它必須與包(); –

+0

@Alan Try'setMinimumSize(new Dimension(1024,1025))'.This should work .. – PraveenMax