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

时间:2018-09-30 13:21:43

标签: java object canvas components awt

  1. f.add(new MyCanvas())中的“ new MyCanvas()”是什么?
  2. 即使在CanvasExample类构造函数或main()方法中未调用paint()方法,我们如何得到椭圆形
  3. 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 个答案:

答案 0 :(得分:0)

  1. 这是Canvas类的实例。在Java中,new是用于创建对象(给定类的实例)的关键字。话虽这么说-new Canvas()创建了Canvas类的新实例。类名后的方括号表示构造函数-想要创建给定类型的对象时正在调用的代码块。

  2. 由于paint方法被调用了 ,所以您呈椭圆形。只是没有从您的代码中显式调用它。正如您在this tutorial article published by Oracle中所读到的,paint方法将始终被触发为所谓的“回调机制”。此方法属于Container类。我建议阅读docs about itpaint类中的MyCanvas方法将覆盖paint中的Canvas方法。在扩展Canvas类并覆盖paint方法时,应始终在方法开始时调用super方法。您可以在我现在已经包括的链接中阅读为什么。

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

      

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

答案 1 :(得分:0)

希望您能理解:D

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

该构造函数创建类Frame的新实例“ f”,并调用类Frame的构造函数,它将该框架的标题设置为“ Canvas Example”
在构造函数CanvasExample()的下一行中,它将类MyCanvas的新实例添加到名为“ f”的Frame实例中,并将其添加到构造函数CanvasExample()的第三行中将“ f”的布局设置为null
构造函数的第四行CanvasExample(),将“ f”的大小设置为400x400
构造函数的第五行CanvasExample()屏幕上显示“ f”(您可以看到它)
和构造函数的结尾CanvasExample()返回到main

,当创建类MyCanvas的新实例时,称为它的构造函数,该构造函数将其背景设置为“ Color.GRAY”,大小为300x200,以及所有MyCanvas()构造函数

每当需要再次渲染“ f”时,它都会调用类paint(Graphics g)的实例的方法MyCanvas,使实例小于“ f”,因​​此您可以在
后面看到白色 白色是“ f”的背景

我想这就是您要的全部。
祝你有美好的一天