0

Javaアプレット(JApplet)を持っています。このアプレットは、JComponent(PanelAux)を使用して、定期的に変化する値と画像を表示します。しかし、アプレットはそれ自体を更新しません。アプレットを更新するにはどうすればよいですか?

//--------------------------------------------RUN

public void run()
    while (true) {
        try {
            myThread.sleep(1000);
        } 
        catch (InterruptedException e){
        }    
        repaint();
    }
}
//--------------------------------------------PAINT
public void paint(Graphics g)
{     

    dim  = new Dimension(image.getWidth(this)+50,image.getHeight(this)+50);
    this.resize(dim);
    this.setMaximumSize(dim);
    this.setMinimumSize(dim);

    PanelAux panel = new PanelAux(image);   //JComponent

    add(panel);

    super.paint(g);
}

ありがとうございました

4

3 に答える 3

4

run()メソッドを使用するスレッドを開始する任意の場所で実際にrun()メソッドを呼び出しますか?

paint()また、メソッドに新しいコンポーネントを追加したくないことは間違いありません。それは問題を叫んでいます!

于 2008-12-22T16:04:14.210 に答える
3

一般的なヒントとして、Painting in AWT and Swingの記事では、AWT または Swing で再描画を処理する方法について説明しています。

を使用しているとおっしゃっていたので、「 Swing でのペイントJApplet」のセクションはここで関連するものになります。

具体的には、Swing では、paint(Graphics g)メソッドをオーバーロードするのpaintComponent(Graphics g)ではなく、代わりにスーパークラスのメソッドを呼び出してメソッドを使用する必要がありますpaintComponent「ペイント方法」セクションからの引用:

Swing プログラムはpaintComponent()、オーバーライドではなく オーバーライドする必要がありますpaint()

これは、paintメソッド自体が 3 つの個別のメソッドに分割されているためです。メソッド自体をオーバーライドすると、現在のクラスとその祖先クラスの およびへのpaint呼び出しが防止されます。paintComponentpaintBorderpaintChildren

また、run()メソッドを呼び出すには、アプレット内のどこかから新しいメソッドをJApplet実装して呼び出す必要があります。(おそらくまたはメソッドのいずれかで。)RunnableThreadinitstart

編集:

また、このpaintComponentメソッドは、画面を更新する必要があるたびに呼び出されることに注意してください。メソッドはpaintComponent複数回呼び出されるため、saua が指摘してpaintComponentいるように、メソッド自体の中で新しいオブジェクトをインスタンス化するのはあまり良い考えではありません。

また、別のスレッドを持つように設計されているようです (メソッドRunnableの存在から暗示されるように、アプレットがインターフェイスを実装しているように見えるためrun)、 の状態の更新はメソッド自体でJComponent行われる可能性があります。必要に応じてメソッドrunを呼び出します。repaint

于 2008-12-22T16:27:51.463 に答える
1

paint(Graphics g)をオーバーライドしないでください。

アプレットコンソールでエラー例外がスローされますか?

于 2008-12-22T16:06:28.200 に答える