为了账号安全,请及时绑定邮箱和手机立即绑定

AWT:我正在尝试学习 Java,但无法理解以下程序

AWT:我正在尝试学习 Java,但无法理解以下程序

眼眸繁星 2021-10-20 14:23:52
f.add(new MyCanvas()) 中的“new MyCanvas()”是什么?即使在 CanvasExample 类构造函数或 main() 方法中都没有调用 Paint() 方法,我们是如何得到椭圆的main() 方法中的新 CanvasExample() 是什么import java.awt.*;public class CanvasExample {      public CanvasExample() {          Frame f = new Frame("Canvas Example");          f.add(new MyCanvas());          f.setLayout(null);          f.setSize(400, 400);          f.setVisible(true);      }      public static void main(String args[]) {          new CanvasExample();    }  }  class MyCanvas extends Canvas {      public MyCanvas() {          setBackground (Color.GRAY);          setSize(300, 200);      }    public void paint(Graphics g){          g.setColor(Color.red);          g.fillOval(75, 75, 150, 75);      } }请解释
查看完整描述

2 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

我希望你能理解 :D

首先它调用public static void main(String args[])
然后main创建类的新实例CanvasExample并调用它的构造函数CanvasExample()

,该构造函数创建Frame名为“f”的类的新实例并调用类的构造函数,Frame它将该框架的标题设置为“画布示例”
CanvasExample()它创建的构造函数行并将类的新实例添加MyCanvasFrame名为“f”
的构造函数的第三行的实例CanvasExample()它只是将“f”的布局设置null
为构造函数的第四行CanvasExample()它将“f”的大小设置为 400x400
构造函数的第五行CanvasExample()它只是显示“f”筛选(以便您可以看到它)
并在创建类的新实例时CanvasExample()返回到构造函数的末尾main

MyCanvas被称为它的构造和它是构造函数中设置背景“Color.GRAY”和大小的它安全工程师和所有的MyCanvas()构造函数

,每次当再次渲染“F”需要它调用方法paint(Graphics g)类的实例MyCanvas位该实例较小比“f”,所以你可以看到白色后面的
白色是“f”的背景

我想这就是你所要求的。
祝你今天过得愉快


查看完整回答
反对 回复 2021-10-20
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

  1. 它是Canvas类的一个实例。在 Java 中new是用于创建对象(给定类的实例)的关键字。话虽如此 -new Canvas()创建Canvas类的新实例。类名后面的括号表示构造函数——当你想创建一个给定类型的对象时被调用的代码块。

  2. 你得到了椭圆形,因为这个paint方法被调用了。它只是没有从您的代码中明确调用。该paint方法将始终作为所谓的“回调机制”被触发。这个方法属于Container类。我建议阅读有关它的文档。的paint在方法MyCanvas类覆盖了paint从方法Canvas。在扩展Canvas类和覆盖paint方法时,您应该始终在方法的开头调用 super 方法。您可以在我已经包含在这一点的链接中了解原因。

  3. 与第 1 点一样 -new CanvasExample()创建MyCanvas类的新实例。更具体地说,它调用构造函数 ( public CanvasExample() { ... })。在您提供的代码中, CanvasExample 的构造函数创建类型的新对象Frame并调用其中的一些方法。这些方法之一是add并且它是由类Frame从其超类继承的- Container
    正如Java awt API 所解释的,该add方法:

    将指定的组件附加到此容器的末尾。


查看完整回答
反对 回复 2021-10-20
  • 2 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信