import javax.swing.*; import java.awt.*; import java.awt.event.*; class ProgressBarTest { public static void main(String args[]) { new MainWindow(); } } class MainWindow extends JFrame { JProgressBar progress; static final int PROGRESS_MAX = 100; static final int PROGRESS_MIN = 0; Timer timer; int count = 0; static final int TIMER_DELAY = 100; JLabel label; public MainWindow() { setTitle("ProgressBarTest"); // ウインドウリスナの登録 WindowListener w_listener = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; addWindowListener(w_listener); // プログレスバーの初期化と配置 progress = new JProgressBar(PROGRESS_MIN,PROGRESS_MAX); progress.setValue(0); getContentPane().add(progress,BorderLayout.SOUTH); // プログレスバーの状態をあらわすラベル label = new JLabel("0%",JLabel.CENTER); getContentPane().add(label,BorderLayout.NORTH); // Timerの初期化 ActionListener action_listener = new ActionListener() { public void actionPerformed(ActionEvent e) { count++; progress.setValue(count); label.setText(count + "%"); if(count == PROGRESS_MAX) { timer.stop(); } } }; timer = new Timer(TIMER_DELAY,action_listener); timer.setInitialDelay(0); timer.start(); // ウインドウサイズを、コンポーネントのサイズに合わせる pack(); setVisible(true); } }Source is here. (ZIP Format,832Byte,Shift-JIS)
static final 〜というのは、定数を記述する時の 決まり文句みたいなものですね。 staticをつけることによって、そのクラス特有の値という意味合いになり、 特にインスタンスを生成しなくても、<ClassName>.<FieldName>で 参照出来るようになります。(ex Integer.MAX_VALUE) 今回のようなプログラムの場合は、つけなくても良いかもしれませんね。 また、finalは定数を意味します。ウインドウリスナの登録
順番に読んでいっている人にとっては、もう3回目ですね(笑)。 しかし、重要なことなので、きちんと覚えるまでは、 繰り返しやった方が良いでしょうね。 Windowsリスナは、登録されたウインドウを見張るものです。 ウインドウの状態を監視することで、各種のイベント処理を行うことが出来ます。 また、WindowAdapterクラスを用いることで、WindowEvent中の 必要なイベントについてのみ、処理を行わせることが出来ます。プログレスバーの初期化と配置
JProgressBarの初期化に、JProgressBar(int min,int max) というコンストラクタを用いています。 縦方向にプログレスさせるには、 JProgressBar(JProgressBar.VERTICAL)もしくは、 JProgressBar(JProgressBar.VERTICAL,int min,int max) いずれかのコンストラクタを使います。timer = new Timer(TIMER_DELAY,action_listener);
タイマーの初期化に使われる、アクションリスナは、 タイマーが、delay[ms]ごとに行うイベント処理を指定します。 タイマー処理において、最も重要なところですね。timer.setInitialDelay(0);
setInitialDelayメソッドは、タイマーのスタートを、 どれだけ遅らせるかという、そのまんまのメソッドです。 今回は、特に遅らせる理由がないので、0をセットして、 すぐにアニメーションが始まるようにしています。