Java JPanel不会上漆
我正在编写一个简单的自顶向下的快照程序,我正在尝试以活动方式渲染图形,这样JPanel就不会被操作系统重新绘制,我可以控制重新绘制Java JPanel不会上漆,java,swing,jpanel,Java,Swing,Jpanel,我正在编写一个简单的自顶向下的快照程序,我正在尝试以活动方式渲染图形,这样JPanel就不会被操作系统重新绘制,我可以控制重新绘制 我有一个Level类,它使用Screen类(JPanel)中级别或实体的x和y位置以及buffereImage调用render()。我现在的问题是Screen类中的paintComponents()方法从未被调用。我尝试了几个变体来解决这个问题。我也在Canvas上尝试过,但不是entites开始闪烁,就是createBufferStrategy(3)出现异常。无论
我有一个Level类,它使用Screen类(JPanel)中级别或实体的x和y位置以及buffereImage调用render()。我现在的问题是Screen类中的paintComponents()方法从未被调用。我尝试了几个变体来解决这个问题。我也在Canvas上尝试过,但不是entites开始闪烁,就是createBufferStrategy(3)出现异常。无论如何,这是我现在的源代码,我真的不知道现在有什么问题。
编辑 这是代码中不起作用的重要部分,repaint不调用paintComponent
public void render(){
if(graphics != null){
graphics.dispose();
}
repaint();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(offScreen.getSubimage(0, 0, getWidth(), getHeight()), 0, 0, null);
g.dispose();
Toolkit.getDefaultToolkit().sync();
offScreen.flush();
}
public void render(int x, int y, BufferedImage image) {
graphics = offScreen.createGraphics();
graphics.drawImage(image, x, y, null);
// offScreenGraphics.dispose();
}
问题是paintComponent没有被调用,repaint()什么都不调用,调试器只是对其进行检查
画布尝试
这是我对Canvas的尝试,问题是我无法在注释外的代码中创建缓冲策略。在另一种渲染方法中,它可以工作,但没有用
public void render() {
// if (buffer == null) {
// createBufferStrategy(2);
// buffer = getBufferStrategy();
// }
Graphics g = buffer.getDrawGraphics();
g.drawImage(offScreen, 0, 0, null);
if (g != null) {
g.dispose();
}
if(!buffer.contentsLost()){
buffer.show();
}
}
public void render(int x, int y, BufferedImage image) {
if (buffer == null) {
createBufferStrategy(2);
buffer = getBufferStrategy();
}
Graphics g = offScreen.getGraphics();
g.drawImage(image, x, y, null);
}
我希望你能帮助我,也感谢你对我的帮助
如果您还有其他改进,我也想听听。您在
JPanel
上的render
方法应该只更新状态,并调用一个。由于调用了repaint
,您可能打算覆盖paintComponent()
,而不是paintComponents()
,因此将在中完成绘制。这可能是一个简单的错误,需要执行大量代码。考虑提供一个在任何情况下,都不要使用Canvas
。您可能需要调用repaint
,以“强制”调用paintComponent
。屏幕外缓冲区的大小应与组件的大小相同。如果你想完全控制绘画过程,而不是这样做,那么你应该考虑使用,好的,我会用PrimeToCultType()来试试。MadProgrammer如何将BufferStrategy用于JPanel?并且offScreen.getSubimage()也可以工作吗?您不能将BufferStrategy
与JPanel
一起使用,您必须使用Canvas
,这将从Swing的绘制过程中移除该过程,并为您提供对其的直接控制