我有一个在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中完成它,或者我是否需要更改我的布局管理器?
答案 0 :(得分:2)
但是label的getSize()总是返回零宽度和高度,这会导致抛出异常。
一旦GUI可见,组件只有一个大小。
我想知道如何在grouplayout中完成它,或者我是否需要更改我的布局管理器?
GroupLayout通常仅用于IDE,因为它使用起来很复杂。大多数开发人员将自己编写GUI代码并使用各种布局管理器来实现所需的布局。
在任何情况下,JLabel上的Icon总是以其实际大小显示,因此无论您使用何种布局都无关紧要,图像大小不会改变。
然而,你可以使用Darryl的Stretch Icon,它根据标签的可用空间进行拉伸/收缩。我不知道它是否适用于GroupLayout,但它可以与支持动态大小调整的其他布局管理器一起使用。