1
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 は私にとって非常に紛らわしいです。

4

2 に答える 2

3

なぜキャンバスを拡張するのですか?

それを書いた人がそうするのを選んだからです。から拡張するクラスのみComponentが実際に画面に描画でき、それらが有効な可視ウィンドウにアタッチされている場合にのみ

このプログラムでペイントが呼び出されるのはいつですか?

塗装は当方の責任ですRepaintManager。コンポーネントをいつ再描画する必要があるかを決定し、Event Dispatching Thread で再描画イベントをスケジュールします。これは、あなたに代わって呼び出します(あなたの場合updateは呼び出します) 。paint

このテーマの詳細については、AWT と Swing でのペイントを参照してください。

于 2013-04-11T03:12:20.653 に答える