Java 摆动图片剪切off/zoomed

Java Swing image cut off/zoomed

当我尝试在 Java Swing 中渲染 png 图像时,它的各个面都被剪切 off/zoomed。这是我的代码:

this.setSize(500, 500);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.getGraphics().drawImage(getImage("IMAGE PATH"), 0, 0, this);

这是我的getImage函数

public static Image getImage(String path) {
        File file = new File(path);
        try {
             return ImageIO.read(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

我要渲染的图片是500x500,和我的帧一样,但还是出错了。这也适用于我使用这样的函数时:

Image image = getImage("Image Path");
assert image != null;
JLabel picLabel = new JLabel(new ImageIcon(image));

这是我要渲染的图像之一:

结果如下: 这个例子有点难看,不过应该是地低树高。

不设置边框大小

如果您的图片是 500x500,那么当框架也有标题栏和边框时,您怎么能期望图像大小和框架大小相同?

不做自定义绘画`

改为:

  1. 创建一个带有 ImageIcon 的 JLabel。
  2. 将标签添加到框架
  3. 在使框架可见之前调用 pack()

所有组件都将获得合适的大小。

阅读 How to Use Labels 上的 Swing 教程以获取更多信息和示例。

虽然@camikr 找到了解决方案,但我找到了一个更好的解决方案。

我所做的是创建一个新的 JPanel 和 运行 setPreferredSize,尺寸为 JFrame (500x500)。然后我覆盖 paintComonent 函数以使用 Graphics2D class.

渲染图像
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.Objects;

public class MyPanel extends JPanel {
    public Image loadedImage = getImage("Image");
    public LoadState() {
        setPreferredSize(new Dimension(500,500));
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g.create();
        g2.drawImage(loadedImage, 0, 0, null);
        g2.dispose();
    }
}

编辑:修正@Harald K 的建议