gpt4 book ai didi

java - 如何在更改 JLabel 大小时动态缩放图像

转载 作者:行者123 更新时间:2023-12-02 10:54:55 24 4
gpt4 key购买 nike

我已将图像读入 JLabel 并将图像缩放到 JLabel 的大小,如下所示:

File file = new File ("C:/Users/Me/Desktop/TestImages/test.jpg");
BufferedImage image = ImageIO.read(file);

Image scaledImage = image.getScaledInstance(label.getWidth(), label.getHeight(), Image.SCALE_SMOOTH);
label.setIcon(new ImageIcon(scaledImage));

我使用提供的GroupLayout并将水平轴和垂直轴设置为“自动调整大小”(通过设计 View ),以便 JLabel 的大小自动调整为每当我更改窗口大小时使用 JFrame。

现在我想调整图像的大小以及 JLabel 的大小,但这里开始出现麻烦。我添加了一个事件处理程序,用于响应调整 JFrame 的大小,如下所示:

addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
addScaledImage(); // executes the lines above
}
});

这在理论上可行,但速度非常慢。因此,我尝试将事件处理程序添加到 JLabel 而不是 JFrame,但这导致了另一个问题:图像不断扩展而不执行任何操作。然后,我用 JScrollPane 包围 JLabel,并将事件处理程序添加到 JScrollPane。只要我扩展 JFrame 的大小,这就有效。但是,当我缩小窗口大小时,图像的大小并没有缩小,而是保持不变。

  1. 是否有更优雅的方式来集成事件处理程序(可能不需要 JScrollPane 的帮助)?

  2. 如何使我的图像/JLabel 自动调整大小以及任何调整大小事件(增加和减少 JFrame 的大小)?另一种方法(例如另一个 LayoutManager)可能更适合这个?

  3. 另外,如果我想保持图像的高宽比,是否有指定的缩放方法?

最佳答案

I'd like to adjust the size of the image together with the size of the JLabel

您可以使用Stretch Icon 。当标签尺寸改变时,它会自动缩放。适用于任何可以显示图标的组件。

Then I surrounded the JLabel with a JScrollPane

However, when I reduce the windows size, the image is not being reduced in size but instead stays the same

您不应该使用 JScrollPane。当滚动 Pane 缩小时,添加到滚动 Pane 的组件的大小不会改变。相反,会显示滚动条。

I'm using the provided GroupLayout and set the horizontal and vertical axes to "Auto-Resizable

我不会使用 IDE 来生成布局代码,也不会使用 GroupLayout,因为对于如此简单的事情来说它过于复杂。

只需将标签(使用 StretchIcon)添加到框架即可。默认情况下,框架使用 BorderLayout,它将自动调整添加到 BorderLayout 中心的任何组件的大小。

关于java - 如何在更改 JLabel 大小时动态缩放图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51848307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com