如何在GroupLayout中调整图像大小?

时间:2013-12-03 06:28:20

标签: java swing layout-manager

我有一个在grouplayout中显示带有标签的图像。我希望在窗口大小改变时调整图像大小,但标签的getSize()总是返回零宽度和高度,这会导致抛出异常。 这是我的代码的相关部分:

GroupLayout gl_panel_3 = new GroupLayout(panel_3);
    gl_panel_3.setHorizontalGroup(gl_panel_3.createParallelGroup(
            Alignment.LEADING).addGroup(
            gl_panel_3
                    .createSequentialGroup()
                    .addContainerGap()
                    .addComponent(logoPanel,GroupLayout.PREFERRED_SIZE,300,Short.MAX_VALUE)
                    .addComponent(topButtonPanel,
                            GroupLayout.PREFERRED_SIZE, 519,
                            GroupLayout.PREFERRED_SIZE).addContainerGap()));
    gl_panel_3.setVerticalGroup(gl_panel_3.createParallelGroup(
            Alignment.LEADING)
            .addComponent(logoPanel,GroupLayout.PREFERRED_SIZE,100,Short.MAX_VALUE)
            .addComponent(topButtonPanel,GroupLayout.PREFERRED_SIZE, 100, Short.MAX_VALUE));

JLabel label22 = new JLabel();


GroupLayout gl_logoPanel = new GroupLayout(logoPanel);
    gl_logoPanel.setHorizontalGroup(
        gl_logoPanel.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_logoPanel.createSequentialGroup()
                .addComponent(logoLabel, GroupLayout.PREFERRED_SIZE, 122, GroupLayout.PREFERRED_SIZE)
                .addContainerGap(313, Short.MAX_VALUE))
    );
    gl_logoPanel.setVerticalGroup(
        gl_logoPanel.createParallelGroup(Alignment.LEADING)
            .addComponent(logoLabel, GroupLayout.DEFAULT_SIZE, 104, Short.MAX_VALUE)
    );

ImageIcon icon = new ImageIcon(getClass().getResource("/icons/noa_en/logo.png"));
    ImageIcon scaledinstance = new ImageIcon(icon.getImage().getScaledInstance(label22.getWidth(), label22.getWidth(), Image.SCALE_SMOOTH));
    label22.setIcon(scaledinstance);

我想知道如何在grouplayout中完成它,或者我是否需要更改我的布局管理器?

1 个答案:

答案 0 :(得分:2)

  

但是label的getSize()总是返回零宽度和高度,这会导致抛出异常。

一旦GUI可见,组件只有一个大小。

  

我想知道如何在grouplayout中完成它,或者我是否需要更改我的布局管理器?

GroupLayout通常仅用于IDE,因为它使用起来很复杂。大多数开发人员将自己编写GUI代码并使用各种布局管理器来实现所需的布局。

在任何情况下,JLabel上的Icon总是以其实际大小显示,因此无论您使用何种布局都无关紧要,图像大小不会改变。

然而,你可以使用Darryl的Stretch Icon,它根据标签的可用空间进行拉伸/收缩。我不知道它是否适用于GroupLayout,但它可以与支持动态大小调整的其他布局管理器一起使用。