-1

アプレットに、最初の半径のサイズから始まり、半径の最後のサイズに達するまで何度も拡大する円を描かせようとしています。正しい方向へのプッシュが必要なだけです。これは私がこれまでに持っているものです..

import javax.swing.JApplet;
import java.awt.Graphics;
import java.util.Scanner;

public class circleExpandv1 extends JApplet
{
    public void paint( Graphics g )
    {
        super.paint( g ); //instantiate g with paint

        Scanner scan = new Scanner( System.in );

        System.out.print( "\nEnter beginning radius > " );
        int radiusStart = scan.nextInt();  

        System.out.print( "\nEnter ending radius > " );
        int radiusEnd = scan.nextInt();  

        int centerX0 = 150, centerY0 = 50; // set x y cordinates
        int radius0 = radiusStart;  // set radius                 

        int centerX1 = 150, centerY1 = 50; // set x y cordinates
        int radius1 = radiusEnd;  // set radius

        while ( radiusStart != radiusEnd )
        {
             if ( radius0 < radius1 )
             {
                 g.drawOval( centerX0 - radius0, centerY0 - radius0, radius0 * 2, radius0 * 2 ); //draw oval
             }
        }

        //g.clearOval( centerX0 - radius0, centerY0 - radius0, radius0 * 2, radius0 * 2 ); //clear oval

        }
    }
4

2 に答える 2

0
while ( radiusStart != radiusEnd )
{
    if ( radius0 < radius1 )
    {
        g.drawOval( centerX0 - radius0, centerY0 - radius0, radius0 * 2, radius0 * 2 ); //draw oval
    }

}

ループ内のコードは radiusStart または radiusEnd を変更しないため、これは永久にループします (またはまったくループしません)。おそらくこれは、要求された「正しい方向へのプッシュ」を提供しますか?

于 2013-11-13T02:35:19.500 に答える
0

Swing はシングル スレッド環境です。つまり、UI へのすべての更新は、イベント ディスパッチ スレッドのコンテキスト内で発生することが期待されます。これは、このスレッドをブロックする操作によって、EDT が再描画要求を含む新しいイベントを処理できなくなることも意味します。

paintいつでも呼び出すことができ、コンポーネントの状態を再描画することが期待されます。

paint可能な限り高速に実行することが期待されます。そうしないと、再描画プロセスが遅くなります。

paintのようなものから拡張するカスタム コンポーネントの作成を選択する代わりに、最上位のコンテナーのオーバーライドを避け、そのメソッドJPanelをオーバーライドする必要がありますpaintComponent

見てみるところから始めます

あなたの場合、javax.swing.Timer(円を描くという)最終結果が得られるまで、 a を使用して定期的に更新をトリガーすることをお勧めします。

アニメーションは時間の経過に伴う変化の錯覚であることを忘れないでください...

また、グラフィカル環境内で操作しようとしています。これはイベント駆動型の環境であり、 を介してユーザー入力を取得しようとしても意味がありません。また、ユーザーが要求に応答する手段がないため、Scannerを使用する場合は特に便利ではありません。JApplet

代わりに、ユーザー入力を取得するために利用できるさまざまな UI コンポーネントを利用する必要がJTextFieldありますJSpinnerJFormattedTextFieldJButton

詳細については、Swing を使用した GUI の作成を参照してください。

JApplet個人的には、現時点では使用を避けたいと思います。これは、独自の複雑さをもたらしJFrame、プライマリ トップ レベル コンテナーのようなものを使用することに固執するためです。

于 2013-11-13T02:54:58.743 に答える