我想绘制一个后备缓冲区,然后在JPanel上显示,但我无法将图纸应用到它,它只会显示为完全黑屏。
有什么想法吗?
我目前的代码:
public class Game extends JPanel {
int screenWidth = 1280;
int screenHeight = 720;
BufferedImage backbuffer;
Graphics2D g2d;
AffineTransform at = new AffineTransform();
Polys polygon = new Polys();
public void init() {
backbuffer = new BufferedImage(screenWidth, screenHeight, BufferedImage.TYPE_INT_RGB);
g2d = backbuffer.createGraphics();
}
public void update(Graphics g) {
g2d.setColor(Color.PINK);
g2d.fillRect(0, 0, screenWidth, screenHeight);
drawStuff();
paint(g);
}
public void drawStuff() {
g2d.setTransform(at);
g2d.translate(10, 10);
g2d.setColor(Color.BLACK);
g2d.drawPolygon(polygon.getPoly());
}
public void paint(Graphics g) {
g.drawImage(backbuffer, 0, 0, this);
}
Game() {
setPreferredSize(new Dimension(screenWidth, screenHeight));
init();
}
public static void main(String[] args) {
JFrame frame = new JFrame("Game Test");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.getContentPane().add(new Game());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
答案 0 :(得分:1)
由于某些原因,它可以使用Canvas但不能使用JPanel(使用paintComponent)。 update()不会被paintComponent调用吗?
不要覆盖update()方法。这是旧的AWT代码,并没有在Swing中完成。在创建BufferedImage时,可以在构造函数中完成对BufferedImage的绘制。但一般来说,当图像是静态的时,你只会使用BufferedImage。
在你的情况下,我建议你不需要BufferedImage。只需在paintComponent(...)
方法中执行所有自定义绘制。