我想在垂直行中创建一个包含两个组件的布局。 第一个组件是我自己的类ImagePanel的一个实例,它扩展了Panel并显示了一个图像,我希望它占用显示整个图像所需的确切空间。然后,剩余空间应由其他组件填充(在本例中为另一个具有GridLayout的Panel)。见图。
在Android中,您可以使用weight属性来完成此操作,但我无法在Java中找到类似的内容,而且我看不到Java中的任何标准布局管理器都适用于此。
我尝试将ImagePanel放在BorderLayout.NORTH中,将另一个面板放在BorderLayout.CERNTER中,但是第二个面板然后重叠了图像,因此无效。
我也想过使用GridLayout,但网格不关心图像的大小,所以我认为这也不会有用。
感谢任何帮助。
答案 0 :(得分:2)
如果图像面板的getPreferredSize()
返回正确的尺寸(即它显示的图像的尺寸),则BorderLayout应该可以工作。
使用包含ImageIcon且没有文本而不是自定义ImagePanel的简单JLabel会为您做到这一点。
答案 1 :(得分:1)
java中最强大的布局是GridBagLayout。它具有重量和重量属性,锚,填充等。
默认情况下,使用GridBagLayout,每个组件都具有完全显示的所有必要空间。如果你想扩展第二个面板,那么你的图像中的weighty = 0.0就足够了,而你的其他面板中的weighty = 1.0就足够了。
答案 2 :(得分:0)
javax.swing.Box
应该正是您想要的。有两种类型的盒子,纵向和横向,你需要一个垂直:
Box box = Box.createVericalBox();
box.add(comp1);
box.add(Box.createVerticalStrut(5)); // add some empty space
.
.
.
add(box);
Box
只会强制一方相等,对于垂直方向,它是宽度,长度可以是任意大小。