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をセットして、 すぐにアニメーションが始まるようにしています。