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

标签 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 中执行此操作,或者是否必须更改布局管理器?

最佳答案

but label's getSize() always returns zero width and height which causes and exception to be thrown.

只有 GUI 可见时,组件才有大小。

I'm wondering how to do it in grouplayout,or if I have to change my layout manager?

GroupLayout 一般只在 IDE 中使用,因为使用起来很复杂。大多数开发人员会自己编写 GUI 并使用各种布局管理器来实现所需的布局。

在任何情况下,JLabel 上的图标始终以其实际大小显示,因此无论您使用什么布局,图像大小都不会改变。

但是您可以使用 Darryl 的 Stretch Icon它被设计为根据标签的可用空间拉伸(stretch)/收缩。我不知道它是否可以与 GroupLayout 一起使用,但它可以与其他支持动态调整大小的布局管理器一起使用。

关于java - 如何在GroupLayout中调整图像大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20344335/

相关文章:

java - Swing:面板尺寸问题

java - Assert.notThrown 可以在抛出异常时指定一条消息

java - 使用具有完整内容的单个节点元素显示 JTree

java - 为什么我的 printWriter 不工作?

java - 我的 JPanel 没有按我想要的方式显示

java - 展开 JFrame 后如何固定 JPanel 的位置

java - 无法同时使用 @NonNull 和 @NonNull 进行注释

java - 如何构建反向按位运算

java - Android - JSONArray 到 RecyclerView 适配器?

java - 如何将 3 个单独的程序放入 JTabbedPane 中。它们已经为 JFrame 编写