3

私の質問はまっすぐです。私はニートビーンズでシンプルなアプリを作成しました。ボタンをクリックすると、テキストのx座標に「@」が20ずつ変化し続けます。コードは次のとおりです。-

int x;

private void wActionPerformed(java.awt.event.ActionEvent evt) 
{                                  
    x=x+20;       
    q.setLocation(x, 0);    
}

このコードは、jbutton(w)をクリックするたびにjlabel(q)を20座標右に移動するだけです。今私が欲しいのは、ボタンを1回だけクリックすると、JLabelの位置は特定のx座標(たとえば200)に達するまでx座標を20ずつ増やし続ける必要があるということです。forループを使用してみました:-

private void wActionPerformed(java.awt.event.ActionEvent evt)
{
    for(x=0;x<201;x=x+20)
    {
        q.setlocation(x,0);
    }  
}

しかし、これでボタンをクリックすると、jlabelは20座標ごとに停止することなく、200 x座標に直接移動します...助けてください..よろしく、スリンガー

4

1 に答える 1

2

上記の問題は、Swingがインクリメント機能を呼び出し、インクリメント関数が完了した後にのみ更新を実行することです。代わりに、このアニメーションを実行するために別のスレッドを起動し、増分ごとにSwingを更新する必要があります。

SwingUtilities.invokeLater()SwingWorkerクラスをチェックしてください。これがSwingWorkerのチュートリアルです。

于 2012-11-26T11:08:46.040 に答える