Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何完全重新绘制Java框架的画布?_Java_User Interface_Awt - Fatal编程技术网

如何完全重新绘制Java框架的画布?

如何完全重新绘制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);

我正在使用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 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: