2011-10-04 69 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