2017-01-16 24 views
1

私はJavaで小さなゲームをプログラミングしています。そのために、ゲーム内の人々と会話するためのテキストが入ったダイアログテキストボックスを印刷します。タイマーでJavaグラフィックスが機能しない

public static void printConBox(Graphics g, String firstLine, String secondLine, String thirdLine, String fourthLine){ 
    g.setColor(Color.WHITE); 
    g.fillRect(x, y, 600, 180); 
    g.setColor(Color.BLACK); 
    Timer timer = new Timer(); 
    timer.schedule(new TimerTask(){ 

     @Override 
     public void run() { 
      if(i <= firstLine.length() - 1){ 
       char c = firstLine.charAt(i); 
       i++; 
       String s = "" + c; 
       System.out.print(s); 
       g.drawString(s, xdif, y + 25); 
       xdif += 15; 
      }else{ 
       timer.cancel(); 
      } 
     } 

    }, 0, 100);} 

グラフィックは心配しないでください。これは、プログラマーが白いテキストボックスをペイントしているためです。しかし、文字列「firstLine」の文字はそこにありません。これを実行すると、テキストのアニメーションになるはずです!

私はこれがder Timerと関係があると思います!しかし、出力コンソールでの印刷は完全に機能しています!私はまた、forループでのThread.sleepでそれを試してみてください、まだ動作していない...

任意のアイデア?...

PS:私は、paintComponentを使用していて、そのグラフィックよう取り組んでいます私を信じて;)

+0

グラフィックスオブジェクトは、それを受け取るペイントメソッドの期間だけ有効です。遅いタイマータスクで後で使用するために、それを「保存」することはできません。あなたのタイマーは、関連するデータを変更してから、コンポーネントに再描画(その一部)を指示する必要があります。スレッドの問題により、AWTとSwingを操作するときにjava.util.Timerではなくjavax.swing.Timerを使用することをお勧めします。 – VGR

+0

ありがとう私はそれを試してみる::) – Caipi

答えて

0
public void actionPerformed(ActionEvent e){ 
    if(Conversation.i <= firstLine.length() - 1){ 
     char c = firstLine.charAt(Conversation.i); 
     Conversation.i++; 
     String s = "" + c; 
     System.out.print(s); 
     g.drawString(s, Conversation.xdif, Conversation.y + 25); 
     Conversation.xdif += 15; 
     Conversation.timer.restart(); 
    }else{ 
     Conversation.timer.stop(); 
    } 
} 

私はどのようにしてグラフィックスを取得するのですか?タイマーは動作しますか? ところで、System.outがうまく動いている!ニース...;)

+0

私はそれを解決した:) VGRに特別なおかげで、大きな助けとなった。誰かがあまりにもしたい場合は、ソリューションを参照してplsここにコメントを追加... – Caipi

関連する問題