0

我想在垂直行中制作一个包含两个组件的布局。第一个组件是我自己的类 ImagePanel 的一个实例,它扩展了 Panel 并显示了一个图像,我希望它占据显示整个图像所需的确切空间。剩余的空间应该由其他组件(在这种情况下是另一个具有 GridLayout 的面板)填充。看图片。

想要的布局

在 Android 中,您可以通过使用 weight 属性来做到这一点,但我在 Java 中找不到类似的东西,而且我看不出 Java 中的任何标准布局管理器都适合这个。

我尝试将 ImagePanel 放在 BorderLayout.NORTH 中,将另一个面板放在 BorderLayout.CERNTER 中,但是第二个面板与图像重叠,因此不起作用。

我也想使用 GridLayout 但网格不会关心图像的大小,所以我认为这也行不通。

任何帮助表示赞赏。

4

3 回答 3

2

getPreferredSize()如果图像面板返回正确的尺寸(即它显示的图像的尺寸),BorderLayout 应该可以工作。

使用包含 ImageIcon 且没有文本的简单 JLabel 代替您的自定义 ImagePanel 将为您做到这一点。

于 2012-11-02T08:07:34.123 回答
1

java中最强大的布局是GridBagLayout。它具有 weightx 和 weighty 属性,anchor,fill 等。

默认情况下,使用 GridBagLayout 每个组件都有所有必要的空间来完全显示。如果您希望第二个面板扩展,那么在您的图像中使用 weighty=0.0 和在另一个面板中使用 weighty=1.0 就足够了。

于 2012-11-01T22:07:08.807 回答
0

javax.swing.Box应该正是你想要的。有两种类型的盒子,垂直的和水平的,你需要一个垂直的:

Box box = Box.createVericalBox();
box.add(comp1);
box.add(Box.createVerticalStrut(5)); // add some empty space
  .
  .
  .
add(box);

Box只会强制一侧相等,对于垂直,它是宽度,长度可以是任何尺寸。

于 2012-11-03T23:52:02.847 回答