2

現在、いくつかの基本的なチュートリアルを行っています。現在の人はあなたの名前を赤で描くグラフィックプログラムを望んでいます。JComponentを拡張し、drawString()メソッドを使用してこれを行うNameComponentクラスを作成しようとしました。

import java.awt.Graphics2D;
import java.awt.Graphics;
import java.awt.Color;
import javax.swing.JComponent;

public class NameComponent extends JComponent {

    public void paintMessage(Graphics g) {

    Graphics2D g2 = (Graphics2D) g;

    g2.setColor(Color.RED);
    g2.drawString("John", 5, 175);

    }
}

JFrameを使用して名前を表示するNameViewerクラスを使用します。

import javax.swing.JFrame;

public class NameViewer {

public static void main (String[] args) {

    JFrame myFrame = new JFrame();
    myFrame.setSize(400, 200);
    myFrame.setTitle("Name Viewer");
    myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    NameComponent myName = new NameComponent();
    myFrame.add(myName);

    myFrame.setVisible(true);
    }
} 

...しかし、実行すると、フレームが空白になります。誰かが私がここで間違っていることを教えてもらえますか?

どうもありがとう!

4

2 に答える 2

1

paintComponentではなくメソッドをオーバーライドする必要がありますpaintMessage@Overrideメソッドにアノテーションを追加すると、それpaintMessageがの標準メソッドではないことがわかりJComponentます。drawStringまた、の追加の装飾寸法のためにテキストが現在表示されていないため、y座標を減らすこともできますJFrame。最後super.paintComponentに、コンポーネントの背景を再描画するために呼び出すことを忘れないでください。

@Override
public void paintComponent(Graphics g) {
   super.paintComponent(g);
   Graphics2D g2 = (Graphics2D) g;
   g2.setColor(Color.RED);
   g2.drawString("John", 5, 100);
}

参照:AWTおよびSwingでのペイント

于 2012-12-11T17:50:58.173 に答える
0

次の後にこの行を追加する必要がありますpublic void paintMessage(Graphics g){

super.paint(g);

これは、メッセージをペイントするためにスーパークラス(JComponent)を使用するようにJavaに指示します。

paintComponents()また、ではなくメソッドを呼び出す必要がありますpaintMessage()

于 2012-12-11T17:44:35.100 に答える