我现在正在进行一场比赛,迄今一直表现不错,但我现在遇到了麻烦。我有一个JFrame。我添加了一个JPanel。 JPanel由三个应该绘制图片的JComponent组成。这里是我的代码:(请注意,并非所有方法都显示)为什么我的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和调试器来达到这个目的。 –