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

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);  

    } 

}

请解释


眼眸繁星
浏览 131回答 2
2回答

慕的地6264312

我希望你能理解 :D首先它调用public static void main(String args[])然后main创建类的新实例CanvasExample并调用它的构造函数CanvasExample(),该构造函数创建Frame名为“f”的类的新实例并调用类的构造函数,Frame它将该框架的标题设置为“画布示例”。CanvasExample()它创建的构造函数行并将类的新实例添加MyCanvas到Frame名为“f”的构造函数的第三行的实例CanvasExample()它只是将“f”的布局设置null为构造函数的第四行CanvasExample()它将“f”的大小设置为 400x400构造函数的第五行CanvasExample()它只是显示“f”筛选(以便您可以看到它)并在创建类的新实例时CanvasExample()返回到构造函数的末尾mainMyCanvas被称为它的构造和它是构造函数中设置背景“Color.GRAY”和大小的它安全工程师和所有的MyCanvas()构造函数,每次当再次渲染“F”需要它调用方法paint(Graphics g)类的实例MyCanvas位该实例较小比“f”,所以你可以看到白色后面的白色是“f”的背景我想这就是你所要求的。祝你今天过得愉快

小唯快跑啊

它是Canvas类的一个实例。在 Java 中new是用于创建对象(给定类的实例)的关键字。话虽如此 -new Canvas()创建Canvas类的新实例。类名后面的括号表示构造函数——当你想创建一个给定类型的对象时被调用的代码块。你得到了椭圆形,因为这个paint方法被调用了。它只是没有从您的代码中明确调用。该paint方法将始终作为所谓的“回调机制”被触发。这个方法属于Container类。我建议阅读有关它的文档。的paint在方法MyCanvas类覆盖了paint从方法Canvas。在扩展Canvas类和覆盖paint方法时,您应该始终在方法的开头调用 super 方法。您可以在我已经包含在这一点的链接中了解原因。与第 1 点一样 -new CanvasExample()创建MyCanvas类的新实例。更具体地说,它调用构造函数 ( public CanvasExample() { ... })。在您提供的代码中, CanvasExample 的构造函数创建类型的新对象Frame并调用其中的一些方法。这些方法之一是add并且它是由类Frame从其超类继承的- Container。正如Java awt API 所解释的,该add方法:将指定的组件附加到此容器的末尾。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java