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);
}
}
请解释
答案 0 :(得分:0)
这是Canvas
类的实例。在Java中,new
是用于创建对象(给定类的实例)的关键字。话虽这么说-new Canvas()
创建了Canvas
类的新实例。类名后的方括号表示构造函数-想要创建给定类型的对象时正在调用的代码块。
由于paint
方法被调用了 ,所以您呈椭圆形。只是没有从您的代码中显式调用它。正如您在this tutorial article published by Oracle中所读到的,paint
方法将始终被触发为所谓的“回调机制”。此方法属于Container
类。我建议阅读docs about it。 paint
类中的MyCanvas
方法将覆盖paint
中的Canvas
方法。在扩展Canvas
类并覆盖paint
方法时,应始终在方法开始时调用super方法。您可以在我现在已经包括的链接中阅读为什么。
与第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”的背景
我想这就是您要的全部。
祝你有美好的一天