Я сейчас работаю над игрой и делаю все хорошо, но сейчас у меня проблемы. У меня есть JFrame. Я добавил JPanel. JPanel состоит из трех JComponents, которые должны рисовать изображения. Вот мой код: (Обратите внимание, что не все из моих методов показаны)Почему мой JComponent не рисует изображения?
public class Game extends JFrame implements KeyListener {
public static Game g;
public JPanel pan;
Paddle p1;
Paddle p2;
Ball ball;
public int p1Y = 0;
public int p2Y = 0;
public int ballY = 300;
public Game() {
setTitle("Game");
setSize(600, 600);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setResizable(false);
pan = new JPanel();
pan.setBackground(Color.BLACK);
p1 = new Paddle(0, p1Y);
p2 = new Paddle(600, p2Y);
ball = new Ball(300, ballY);
pan.add(p1);
pan.add(p2);
add(pan);
setVisible(true);
pan.addKeyListener(this);
pan.requestFocus();
}
public static void main(String args[]) {
g = new Game();
}
Этот метод устанавливает все. У меня есть два других метода, которые будут рисовать изображения.
class Paddle extends JComponent {
public Image img = new ImageIcon("resources/paddle.png").getImage();
public int x;
public int y;
public Paddle(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, x, y, this);
}
}
class Ball extends JComponent {
public Image img = new ImageIcon("resources/ball.png").getImage();
public int x;
public int y;
public Ball(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, x, y, this);
}
}
Я сделал это печать всякий раз, когда был вызван paintComponent, и он напечатал. Единственное, что он не будет рисовать на панели. Мое единственное предположение: конструктор останавливает его от рисования.
Время отладки. Вы ищете подходящее место для изображения? Ты уверен? Вы распечатали user.dir, чтобы проверить? Вы проверили, является ли оно нулевым? Кроме того, часто лучше получить изображение как ресурс, а не как файл, как вы делаете. –
Они не равны нулю, и путь правильный. Мне удалось нарисовать изображение. Другие изображения не будут рисоваться. – user3183865
Хорошо, это полезная информация для нас. Усилия, прилагаемые к отладке, - это хорошо проведенные усилия. Я часто помещал временные границы вокруг своих JPanels, чтобы увидеть, какие размеры они на самом деле, использовать println и отладчик для этой цели. –