1

Jlabelをpaint(Graphics2d g)メソッドに入れても表示されないので、その理由がわかりません。

私のテキストクラス:

import java.awt.Color;
import java.awt.Graphics2D;

import javax.swing.JLabel;


public class Text {
    int ballX,ballY,squareX,squareY;
    Text text;
    private Game game;
    private Ball ball;
    private Racquet racquet;

    public  void main(){
        ballX = ball.getBallX();
        ballY = ball.getBallY();
        squareX = racquet.getSquareX();
        squareY = racquet.getSquareY();
    }

    public void paint(Graphics2D g) {

        g.setColor(Color.red);
        JLabel balltext = new JLabel("the ball is at " + ballX + ballY);
        balltext.setVisible(true);

        g.setColor(Color.green);
        JLabel squaretext = new JLabel("the ball is at " + squareX + squareY);
        squaretext.setVisible(true);
    }
}
4

2 に答える 2

2

コードに正しくないことがいくつかあります。

第一に、ペイント可能なTextものからは拡張されないため、paint呼び出されることはありません。paintComponentコンベンションはとにかくSwingコンポーネントのオーバーライドを好む傾向があります。

また、常に電話する必要がありますsuper.paintXxx。これにより、そもそも問題が浮き彫りになります。

次に、コンポーネントは通常、ペイントを処理するある種のコンテナに追加されます。

プログラムでSwingコンポーネントを使用する場合は、 JFC/Swingを使用したGUIの作成を参照することをお勧めします。

テキストをペイントしたい場合は、2Dグラフィックス、特にテキストAPIの操作を確認することをお勧めします。

あなたが達成しようとしていることについてのもう少しの情報も役立つかもしれません

また、これが意図的かどうかはpublic void main(){わかりませんが、プログラムのメインエントリポイントとして機能することはありません。そうする必要がありますが、他の場所からクラスを呼び出す手段としてpublic static void main(String args[])使用している可能性があります。 main)。

于 2012-11-04T02:28:24.167 に答える
1

物事の外観から、JavaSwingGUIのかなりの数のパラダイム/イディオムが欠落しています。

例えば:

  • コンポーネントの描画方法を指定するためにpaint/paintComponentをオーバーライドする場合は、テキストでJComponentを拡張する必要があります。
  • プログラムへのエントリポイントとして機能する別のMainクラスを作成する必要があります(必ずしもそうする必要はありませんが、今のところ論理的に分離しておくのに役立ち、精神的に概念化するのが簡単になります)
  • メインメソッド内にJFrameを作成してから、Textクラスを作成してJFrameに追加し、JFrameでpack()とsetVisible(True)を呼び出す必要があります。

オリエンテーションを行うために、最初にいくつかの例を確認することをお勧めします。

http://zetcode.com/tutorials/javaswingtutorial/firstprograms/

http://www.javabeginner.com/java-swing/java-swing-tutorial

于 2012-11-04T01:59:38.300 に答える