Ваш метод paintComponent не должен делать ничего, кроме краски.
@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 "))', чтобы загрузить изображение, но уже было указано, вы не должны делать это из метода рисования – MadProgrammer