0

getWidth()メソッドとを使用して、描画された円をフレームの中央に配置する際に問題がありgetHeight()ます。パッケージで何かを試しましImageたが、このメソッドを実装する場所がわかりません:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Frame;
import java.awt.Image;

public class Circle extends Frame {

public Circle() {

    setSize(400,400);
    setLocationRelativeTo(null);
    setVisible(true);
}

public Color() {
}

public void paint(Graphics g) {

    g.setColor(Color.ORANGE);
    g.fillOval(200, 200, 200, 200);
}

public static void main(String[] args) {

    Circle c = new Circle();

    c.paint(null);
}
}

次に、メソッドsetColor(Color)Colorクラス コンストラクターを使用して、この円のランダムな色を作成する必要があります (このプログラムを実行するたびに)。コンストラクターを開きColorましたが、エラーがあります:/

4

2 に答える 2

3

JComponentを使用して Swing の最適化されたペイント モデルを最大限に活用するには、すべてのペイント機能をここに抽出することをお勧めしpaintComponentます。

Circle、実際にはJFrameです。そのコンストラクター内で、円の描画を処理する新しいコンポーネントが作成されます。Colorこれは無効な構文であるため、コンストラクターは削除されました。

円の座標は左上隅から始まり、描画に使用できる幅と高さをすべて使用します。

また、古いスタイルの AWT コンポーネントよりも軽量の Swing コンポーネントを使用することをお勧めします。

public class Circle extends JFrame {

    public Circle() {
        setSize(400, 400);
        add(new CirclePanel());
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {
        Circle c = new Circle();
    }
}

class CirclePanel extends JComponent {
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.ORANGE);
        g.fillOval(0, 0, getWidth(), getHeight());  
    }
}

参照: AWT と Swing でのペイント

于 2012-11-29T23:06:27.013 に答える
3

メソッド内からgetWidth()andを呼び出すだけで、パラメータに対して返された結果を使用できます。getHeight()paint(...)fillOval(...)

そうは言っても、Frame に追加された Canvas を描画することをお勧めします。そうは言ってもpaintComponent(...)、Swing アプリケーションの JFrame の contentPane に追加された JPanel のメソッドを描画する方がはるかに優れています。

于 2012-11-29T23:04:08.913 に答える