0

AWT のみを使用した Java での GUI プログラミングを始めたばかりです。私の仕事は、楕円を描き、それをラベルと一緒に表示することです。どういうわけか、それらを同時に表示する方法がわかりません。追加したらすぐ

add(label);

私のプログラムでは、ラベルのみが表示されます。それがこれまでの私のコードです...

import java.awt.*;
public class Ellipse extends Frame{

public static void main (String args[]) {
    new Ellipse("Ellipse");
}

public void paint(Graphics g){
    Graphics shape = g.create();
    shape.setColor(Color.black);
    shape.fillRect(100,80,100,40);
    shape.setColor(Color.red);
    shape.fillOval(100,80,100,40);

} 

Ellipse(String s){
        super(s);
        setLocation(40,40);
        setSize(300,300);
        setBackground(Color.white);
        Font serif = new Font("Serif", 1, 10);
        setFont(serif);
        Label label = new Label("Ellipse 1",1);
        add(label);
        setVisible(true);
}
}

実際のタスクは、楕円を描き、背景を黒で塗りつぶし、下にラベルを付けることです。私の問題に加えて、最初に別の長方形を描く以外に、楕円の背景を色で塗りつぶす可能性はありますか?

4

1 に答える 1

2

まず第一に、メソッドをオーバーライドするときは、親メソッド呼び出しを呼び出す必要があります。これは、リスコフ置換の原則を破る可能性があるためです。

@Override
    public void paint(Graphics g){
        super.paint(g);
        Graphics shape = g.create();
        shape.setColor(Color.black);
        shape.fillRect(100,80,100,40);
        shape.setColor(Color.red);
        shape.fillOval(100,80,100,40);
        shape.dispose();// And if you create it, you should dispose it   
    } 

そして、楕円が表示されていないため、レイアウトを設定したことがないため、コンストラクターに次のようなものを配置する必要があります

    Ellipse(String s){
        super(s);
        setLocation(40,40);
        setLayout(new FlowLayout());
        setSize(300,300);
        setBackground(Color.white);
        Font serif = new Font("Serif", 1, 10);
        setFont(serif);
        Label label = new Label("Ellipse 1",1);
        add(label);
        pack(); // size the frame
        setVisible(true);
}

そして結果

フレーム結果

最上位のコンテナでペイントしないでください。たとえば、コンポーネントを に追加Panelし、パネルでペイント メソッドをオーバーライドすることをお勧めします。

于 2013-06-11T20:34:39.303 に答える