我创建了一个扩展JFrame
的类,并在其中添加了JPanel
,但paintComponents()
方法没有在JPanel
上绘制任何内容。下面是paintComponents()
的代码,我选择使用双图像缓冲。
public void paintComponents(Graphics graphics) {
panel.paintComponents(graphics);
bufferedImage = createImage(sizeX, sizeY);
Graphics2D g = (Graphics2D) bufferedImage.getGraphics();
for (ImageData myImage : imageData) {
g.drawImage(myImage.getImage(), myImage.getX(), myImage.getY(), null);
}
graphics.drawImage(bufferedImage, 0, 0, null);
}
这有什么问题吗?顺便说一句,我试过paint()
但它有效,但我认为这不是正确的方法。
感谢您的时间。 :)
答案 0 :(得分:7)
不要扩展顶级组件,例如JFrame
。而是保留一个框架的实例,并添加一个面板。所有自定义绘画或组件的添加都在面板中完成。
在面板中进行自定义绘画时,请使用paintComponent
方法(不 paintComponents
不要覆盖它)。
super.paintComponent(g);
。这对于确保考虑边界和填充等非常重要。null
交换this
。每个JComponent
都是ImageObserver
。答案 1 :(得分:2)
请注意JFrame不是JComponent!实际上,永远不会调用paintComponents(Graphics)
方法。修复程序将子类化JPanel并将子类化面板作为内容窗格添加到框架中。在面板中覆盖paintComponents(Graphics)
方法。