如何完全重新绘制Java框架的画布?
我正在使用Java中的AWT创建动画帧。它由如何完全重新绘制Java框架的画布?,java,user-interface,awt,Java,User Interface,Awt,我正在使用Java中的AWT创建动画帧。它由框架和画布以及一些其他组件组成。守则基本上是: public class MyFrame extends Frame implements Runnable{ private Canvas c = new Canvas(); public MyFrame(){ c.setSize(100, 100); this.setSize(100, 100); this.add(c);
框架
和画布
以及一些其他组件组成。守则基本上是:
public class MyFrame extends Frame implements Runnable{
private Canvas c = new Canvas();
public MyFrame(){
c.setSize(100, 100);
this.setSize(100, 100);
this.add(c);
}
}
现在我想在画布上画一部分图像。我尝试使用框架的绘制方法:
public void paint(Graphics g){
Graphics canvasG = c.getGraphics();
canvasG.drawImage(img, x1, y1, w1, h1, x2, y2, w2, h2, null);
{
这将在先前绘制的部分上绘制图片的部分。一、 但是,我想完全重新绘制画布。哇。回答你的问题:
- 不要在扩展Frame的类中绘制,而是在扩展Canvas的类的paint方法中绘制。换句话说,创建一个名为MyCanvas的类,该类扩展Canvas并为其提供一个paint方法覆盖
- 创建此类的对象并将其添加到框架中,以便可以显示该对象
- Canvas类的paint方法重写中的第一个调用应该是super方法,
。这将重新绘制画布,删除需要删除的内容super.paint(g)
- 不要使用getGraphics从组件获取图形对象,因为获取的对象不会持续存在,从而导致不良的副作用(请尝试此操作,然后最小化并恢复GUI以了解我的意思)
- 而是使用从JVM获得并传递到paint方法中的图形对象
- 使用BuffereImage时例外。对他们来说,是的,可以在需要时通过
获取图形对象,但不要忘记在完成后处理它,以免耗尽系统资源getGraphics()
玩得开心。哇。回答你的问题:
- 不要在扩展Frame的类中绘制,而是在扩展Canvas的类的paint方法中绘制。换句话说,创建一个名为MyCanvas的类,该类扩展Canvas并为其提供一个paint方法覆盖
- 创建此类的对象并将其添加到框架中,以便可以显示该对象
- Canvas类的paint方法重写中的第一个调用应该是super方法,
。这将重新绘制画布,删除需要删除的内容super.paint(g)
- 不要使用getGraphics从组件获取图形对象,因为获取的对象不会持续存在,从而导致不良的副作用(请尝试此操作,然后最小化并恢复GUI以了解我的意思)
- 而是使用从JVM获得并传递到paint方法中的图形对象
- 使用BuffereImage时例外。对他们来说,是的,可以在需要时通过
获取图形对象,但不要忘记在完成后处理它,以免耗尽系统资源getGraphics()
玩得开心。我不清楚你的问题是什么。有两个建议是1。使用Swing代替AWT。2.为你的动画使用双缓冲()仍然好奇为什么超过12年的AWT过时了,而不是大约5年的Swing过时了。我没有教训你——我所做的只是问了一个问题,上面madth3提到的一个问题。我们提出这个问题的原因是因为Swing比AWT更灵活、更强大。您的适当回答可以是“因为我的导师要求”、“因为xxx硬件限制”或仅仅是“因为这就是我想要做的”,而不是对仅仅提出问题的人进行不必要的人身攻击。在这里,我很乐意与您就任何问题进行对话,但我坚持您首先要收回并删除您以前不必要的陈述。“一个简单的问题”“生命的意义是什么?”是一个简单的问题。答案更为棘手。换句话说。答案的复杂性与问题的复杂性没有直接关系。通常,当人们问“为什么”时,有一个很好的理由,那就是缩小解决问题的最佳方式的可能性。简言之,如果你想坚持这种“知道是我的事,回答这个该死的问题!”的态度,我看你不会得到什么帮助。但那是你的问题,不是我的问题,也不是其他任何人的问题。祝你好运就Java而言,您应该避免AWT。Swing具有更大的灵活性,而且它是轻量级的(全部采用Java)@安德鲁·霍姆普森是正确的,霍弗·富勒兹也是正确的。切换到AWT,你的生活会更轻松。AWT vs swing:我不清楚你的问题是什么。有两个建议是1。使用Swing代替AWT。2.为你的动画使用双缓冲()仍然好奇为什么超过12年的AWT过时了,而不是大约5年的Swing过时了。我没有教训你——我所做的只是问了一个问题,上面madth3提到的一个问题。我们提出这个问题的原因是因为Swing比AWT更灵活、更强大。您的适当回答可以是“因为我的导师要求”、“因为xxx硬件限制”或仅仅是“因为这就是我想要做的”,而不是对仅仅提出问题的人进行不必要的人身攻击。在这里,我很乐意与您就任何问题进行对话,但我坚持您首先要收回并删除您以前不必要的陈述。“一个简单的问题”“生命的意义是什么?”是一个简单的问题。答案更为棘手。换句话说。答案的复杂性与问题的复杂性没有直接关系。通常,当人们问“为什么”时,有一个很好的理由,那就是缩小解决问题的最佳方式的可能性。简言之,如果你想坚持这种“知道是我的事,回答这个该死的问题!”的态度,我看你不会得到什么帮助。但那是你的问题,不是我的问题,也不是其他任何人的问题。祝你好运就Java而言,您应该避免AWT。Swing具有更大的灵活性,而且它是轻量级的(全部采用Java)@安德鲁·霍姆普森是正确的,霍弗·富勒兹也是正确的。切换到AWT,你的生活会更轻松。AWT vs swing: