你的paintComponent方法不應該做任何bur paint。
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
// g.drawRect(x, y, 50, 50);
g.drawImage(player, 200, 200, this);
}
工具包和圖像行需要在Painter構造函數中。類名應以大寫字母開頭。
編輯基於註釋:
你寫的代碼看起來像這樣:
private Image player;
public Painter() throws Exception {
player = ImageIO.read(getClass().getResource("player.jpg"));
}
的player.jpg需要在同一目錄中的源代碼。否則,您的映像目錄需要位於Java應用程序的類路徑中。
這是一個完整的,簡單的Swing應用程序,用於在JPanel上繪製圖像。
package com.ggl.testing;
import java.awt.Graphics;
import java.awt.Image;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class MyPanel extends JPanel {
private static final long serialVersionUID = -9008812738915944216L;
private static JFrame frame;
private static MyPanel panel;
private static Image image;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
image = getImage();
frame = new JFrame();
panel = new MyPanel();
frame.setSize(500, 500);
frame.add(panel);
frame.setVisible(true);
}
});
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 100, 100, MyPanel.this);
}
private static Image getImage() {
Image image = null;
try {
image = ImageIO.read(MyPanel.class.getResource("maze.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
return image;
}
}
將maze.jpg更改爲您的圖像,並將圖像放在與此示例代碼相同的目錄中。
哪裏像什麼位置? createImage將在當前工作目錄中的文件系統上尋找名爲「player.jpg」的文件 – MadProgrammer
該映像位於與軟件包相同的文件夾中 – Tristan
假設您的意思是該映像與類或其同一個軟件包直接在源代碼中,那麼,就是你的問題。您需要使用'Class#getResource'來獲取資源的URL,然後您可以從中加載該映像。您可以使用'ImageIO.read(getClass()。getResource(「player.jpg」))'加載圖像,但已經聲明,您不應該在paint方法 – MadProgrammer