當我嘗試png在 Java Swing 中渲染影像時,它會在所有方面被切斷/縮放。這是我的代碼:
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));
這是我要渲染的影像之一:

結果如下:
從這個例子中很難看出,但地面應該更低,樹木更高。
uj5u.com熱心網友回復:
不要設定框架的大小
如果您的影像是 500x500,那么當框架還具有標題欄和邊框時,您怎么能期望影像大小和框架大小相同?
不要做自定義繪畫`
反而:
- 創建一個帶有 ImageIcon 的 JLabel。
- 將標簽添加到框架
pack()在使框架可見之前呼叫。
所有組件都將獲得適當的尺寸。
閱讀有關如何使用標簽的 Swing 教程以獲取更多資訊和示例。
uj5u.com熱心網友回復:
盡管@camikr 找到了解決方案,但我找到了一個更好的解決方案。
我所做的是,我創建了一個新的JPanel并setPreferredSize以我的JFrame(500x500)尺寸運行。然后我重寫了paintComonent使用Graphics2D該類渲染影像的函式。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.Objects;
public class MyPanel extends JPanel {
public LoadState() {
setPreferredSize(new Dimension(500,500));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
g2.drawImage(getImage("IMAGE"), 0, 0, null);
g2.dispose();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/404800.html
標籤:
