import java.awt.*;
import javax.swing.JFrame;
public class GraphicsDemo1 extends Canvas
{
public void paint( Graphics g )
{
g.setColor(Color.green);
g.drawRect(50,20,100,200); // draw a rectangle
g.fillOval(160,20,100,200); // draw a filled-in oval
g.setColor(Color.blue);
g.fillRect(200,400,200,20); // a filled-in rectangle
g.drawOval(200,430,200,100);
g.setColor(Color.black);
g.drawString("Graphics are pretty neat.", 500, 100);
int x = getWidth() / 2;
int y = getHeight() / 2;
g.drawString("The first letter of this string is at (" + x + "," + y + ")", x, y);
}
public static void main( String[] args )
{
// You can change the title or size here if you want.
JFrame win = new JFrame("GraphicsDemo1");
win.setSize(800,600);
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GraphicsDemo1 canvas = new GraphicsDemo1();
win.add( canvas );
win.setVisible(true);
}
}
谢谢。Awt和swing让我很困惑
为什么要扩展canvas?
因为写它的人选择了这么做。只有那些从Component
扩展的类才能真正绘制到屏幕上,并且只有当它们附加到一个有效的,可见的窗口
在这个程序中何时调用paint ?
绘画是RepaintManager
的责任。它将决定何时需要重新绘制组件,并在事件调度线程上调度重新绘制事件。这反过来调用(在您的情况下,update
调用)paint
代表您。
您可能需要阅读一下在AWT和Swing中绘画以获得更多关于该主题的详细信息
paint()在控件失效并需要重新绘制时调用。想象一下将应用部分移出屏幕,然后再移回来。Paint会被调用来重新绘制…
我认为可以扩展许多不同的控件来实现相同的目标,这基本上是创建一个自定义绘制的控件。对现有控件进行扩展,使其能够在其表面上绘图、放置在JFrame中、自动重新绘制等。