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,那么当框架也有标题栏和边框时,您怎么能期望图像大小和框架大小相同?
不做自定义绘画`
改为:
- 创建一个带有 ImageIcon 的 JLabel。
- 将标签添加到框架
- 在使框架可见之前调用
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 的建议
当我尝试在 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,那么当框架也有标题栏和边框时,您怎么能期望图像大小和框架大小相同?
不做自定义绘画`
改为:
- 创建一个带有 ImageIcon 的 JLabel。
- 将标签添加到框架
- 在使框架可见之前调用
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 的建议