1

アプリケーションにタイマーを実装する必要があります。これは、10 秒から 0 秒までのカウントダウンを行います。でカウントダウンを表示しJLabelます。

これが私の実装です。

...
Timer t = new Timer(1000, new List());
        t.start();

}

class List implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {
        int sec = 0;
        label.setText(""+sec);
        // Do a if- condition check to see if the clock has reached to, and then stop

    }

}

JLabel が 0 から 10 までカウントを開始してから停止することを期待していました。しかし、そうではありません。JLabel が値0を設定し、インクリメントされません。

更新 1

    t = new Timer(1000, new Listner());
    t.start();


}

class Listner implements ActionListener{
    private int counter = 0;
    @Override
    public void actionPerformed(ActionEvent e) {
        lable.setText(""+ (counter++));

        if (counter == 10)
              t.removeActionListener(this);

    }

}
4

4 に答える 4

4

タイマーが呼び出されるたびに、int 変数 sec が 0 に宣言されます。したがって、Label は更新されません。

sec 変数をグローバル変数として宣言し、actionPerformed メソッドで、呼び出されるたびにその値をインクリメントする必要があります。

 public int sec = 0;
 class List implements ActionListener{

   @Override
   public void actionPerformed(ActionEvent e) {
        sec++;
        label.setText(""+sec);
        // Do a if- condition check to see if the clock has reached to, and then stop

  }

}
于 2012-12-10T17:09:06.497 に答える
4

どこにも保存もインクリメントsecsもしていないので、更新方法がわかりません。試してみてください

Timer timer;

void start() {
  timer = new Timer(1000,new List());
}

class List implements ActionListener {
    private counter = 0;
    @Override
    public void actionPerformed(ActionEvent e) {
        label.setText(""+counter++);

        if (counter == 10)
          timer.removeActionListener(this);
    }
}

カウントダウンが終了したら、タイマーからリスナーを削除できるように、タイマーへの参照をどこかに保存する必要があることに注意してください。

于 2012-12-10T17:09:38.307 に答える
3

完全な例

public class ATimerExample {

    Timer timer;
    int counter = 0;

    public ATimerExample() {
        final JFrame frame = new JFrame("somethgi");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final JLabel label = new JLabel("0");
        JPanel panel = new JPanel();
        panel.add(label, BorderLayout.SOUTH);
        frame.getContentPane().add(panel);
        frame.pack();
        frame.setVisible(true);

        timer = new Timer(1000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                label.setText(String.valueOf(counter));
                counter++;
                if (counter == 10) {
                    //timer.removeActionListener(this);
                      timer.stop();
                }
            }
        });
        timer.start();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new ATimerExample();
            }
        });
    }
}
于 2012-12-10T17:35:30.423 に答える