進歩バー


作業進行状況の表示

データのロードや、アプリケーションの初期化など
プログラムの実行中に、しばしば長期的な処理を施すことがあります
このような場合は、ユーザーに入力をしてほしくはないものです

しかし、ユーザーにとっても、ただ待つだけというのはより状態ではありません
せめて、処理にどの程度時間がかかるのか、今どの程度の段階にあるのか
そういった情報があれば、ユーザーは待ってくれるかもしれません

こうした、処理の進行状況を通達するのは進歩バーコンポーネントです
進歩バーは javax.swing.JProgressBar で実装されています
java.lang.Object
  |
  +--java.awt.Component
        |
        +--java.awt.Container
              |
              +--javax.swing.JComponent
                    |
                    +--javax.swing.JProgressBar

public class JProgressBar extends JComponent
	implements SwingConstants, Accessible
このクラスは、次のようなコンストラクタを提供しています

public JProgressBar()
public JProgressBar(int orient)
public JProgressBar(int min , int max)
public JProgressBar(int orient , int min , int max)
public JProgressBar(BoundedRangeModel newModel)

パラメータを省略したコンストラクタは、デフォルト状態でインスタンスを作ります
デフォルトでは水平方向のバーで、初期値および最小値が 0、最大値は 100 となります

orient には進歩バーの方向を SwingConstants インターフェイスから
VERTICAL または HORIZONTAL のいずれかを指定します
min にはバーの最小値、max には最大値を指定します

newModel にはデータモデルを保存した BoundedRangeModel を渡します
モデルには、主に現在の値、最小値、最大値などを格納します
モデルには javax.swing.BoundedRangeModel インターフェイスを使います

public interface BoundedRangeModel

これには、最小値を設定する BoundedRangeModel.setMinimum()
最大値を設定する BoundedRangeModel.setMaximum()
現在の値を設定する BoundedRangeModel.setValue() メソッドと
同様に、これらに対応した取得用の get_() メソッドが宣言されています

public void setMinimum(int newMinimum)
public void setMaximum(int newMaximum)
public void setValue(int newValue)
public int getMinimum()
public int getMaximum()
public int getValue()

それぞれ、目的の値を受け取り、または返します
このほかにもいくつかのメソッドが宣言されていますが、省略します
このインターフェイスを実体化する場合は、調べてみるとよいでしょう

BoundedRangeModel は javax.swing.DefaultBoundedRangeModel に実装されます
public class DefaultBoundedRangeModel
	extends Object implements BoundedRangeModel , Serializable
このクラスのコンストラクタは次のようになっています

public DefaultBoundedRangeModel()
public DefaultBoundedRangeModel(int value , int extent , int min , int max)

value には値、extent にはバーにスライダがある場合、スライダの長さを
min には最小値、max には最大値をそれぞれ指定します

進歩バーの状態を変更には、通常 JProgressBar クラスのメソッドを使います
BoundedRangeModel 同様に、最小値、最大値、現在値の設定と取得が可能です

public void setMinimum(int n)
public void setMaximum(int n)
public void setValue(int n)
public int getMinimum()
public int getMaximum()
public int getValue()

メソッドの意味は BoundedRangeModel インターフェイスの宣言と同じです
n には適切な値を指定し、get_() メソッドは適切な値を返してくれるでしょう
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends JApplet implements ActionListener {
	Timer timer;
	JProgressBar progressBar;
	public void init() {
		progressBar = new JProgressBar(0 , 100);

		getContentPane().setLayout(new FlowLayout());
		getContentPane().add(progressBar);

		timer = new Timer(100 , this);
		timer.start();
	}
	public void actionPerformed(ActionEvent e) {
		int value = progressBar.getValue();
		if (value == 100) {
			timer.stop();
			return;
		}
		progressBar.setValue(value + 1);
	}
}


このプログラムは、タイマーを使って進歩バーの値を少しずつ増やしています

しかし、これだけでは物足りませんね
場合によっては、進行率を文字として表示させたいと思うかもしれません
この場合は JProgressBar.setString() メソッドを使って設定します
設定されているテキストは JProgressBar.getString() で取得できます

public void setString(String s)
public String getString()

s には、進歩バーに関連付けるテキストを指定します
ただし、デフォルトで進歩バーは文字列を非表示にしています
これは JProgressBar.setStringPainted() メソッドで設定し
JProgressBar.isStringPainted() メソッドで取得することができます

public void setStringPainted(boolean b)
public boolean isStringPainted()

b には、進捗バーが進捗文字列を描画するかどうかを指定します
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends JApplet implements ActionListener {
	Timer timer;
	JProgressBar progressBar;

	public void init() {
		progressBar = new JProgressBar(0 , 100);
		progressBar.setStringPainted(true);

		getContentPane().setLayout(new FlowLayout());
		getContentPane().add(progressBar);

		timer = new Timer(100 , this);
		timer.start();
	}

	public void actionPerformed(ActionEvent e) {
		int value = progressBar.getValue();
		progressBar.setValue(++value);
		progressBar.setString(String.valueOf(value));

		if (value == 100) timer.stop();		
	}
}


図を見て分かるように、文字が表示されましたね
こうすることで、何を処理しているかや、達成率を知らせることができます



前のページへ戻る次のページへ