2016-12-30 11 views
-1

私は初めてのJavaゲームのコードを書いていますが、これまでのところGUIを構築してロジックを追加したいと思います。私のゲームでは、ユーザーは10、9、8、7、6、5、4、3、2、1、0のように(10秒で始まる)彼の動きの経過時間を見るべきです。私はJLabelを作成し、それに時間が掛かった。私のプログラムには3段階の難易度があります。最初に、ユーザーは適切なJButtonをクリックして1つを選択し、ユーザーはタイマーといくつかのオプションを選択して再生する必要があります。どうすればこの問題に対処できますか?私はJavaでTimerクラスについて読んでいますが、JLabelのカウントダウン時間をどのように表示することができるのかまだ分かりません。たぶん私はゲームのループを実装する必要がありますが、正直言って私はそれを作る方法は考えていません。Java - JLabelで経過時間を表示するタイマーの作成方法

+0

まだ試したことがありますか? – GurV

+0

私は解決策を探しています。今ではゲームのループについて考えていて、タイマーと接続する方法は – JeffTheKiller

+0

です。http://compsci.ca/v3/viewtopic.php?t=25991で始めることができます。しかし、g.drawImage呼び出しは、Swingのイベントディスパッチスレッドでは行われません。これは修正する必要があります(SwingUtilities?) –

答えて

0

カウントダウンタイマーメソッドを使用し、カウントダウンする秒数とオプションの「終了時刻」メッセージとともにJLabelを渡すことができます。

あり、インターネット上のもののこの種の多くの例があるが、ここでは1の私の迅速な演出です:あなたは、カウント・ダウンが、その後のJLabel内に表示される方法を変更したい場合は

public static Timer CountdownTimer(JLabel comp, int secondsDuration, String... endOfTimeMessage) {           
    if (secondsDuration == 0) { return null; } 
    String endMsg = "~nothing~"; 
    if (endOfTimeMessage.length>0) { endMsg = endOfTimeMessage[0]; } 
    final String eMsg = endMsg; 
    int seconds = secondsDuration; 
    final long duration = seconds * 1000; 
    JLabel label = (JLabel)comp; 
    final Timer timer = new Timer(10, new ActionListener() { 
     long startTime = -1; 
     @Override 
     public void actionPerformed(ActionEvent event) { 
      if (startTime < 0) { 
       startTime = System.currentTimeMillis(); 
      } 
      long now = System.currentTimeMillis(); 
      long clockTime = now - startTime; 
      if (clockTime >= duration) { 
       ((Timer)event.getSource()).stop(); 
       if (!eMsg.equals("~nothing~")) { label.setText(eMsg); } 
       return; 
      } 
      SimpleDateFormat df = new SimpleDateFormat("mm:ss:SSS"); 
      label.setText(df.format(duration - clockTime)); 
     } 
    }); 
    timer.start(); 
    return timer; 
} 

SimpleDateFormat文字列を変更することができます。このメソッドは、Timerオブジェクトを返すので、いつでも(停止時間が経過する前に)停止させる方法を理解できます。

関連する問題