- PR -

不確定進捗バーの使い方

1
投稿者投稿内容
ぶち
会議室デビュー日: 2005/08/31
投稿数: 5
投稿日時: 2005-08-31 11:26
初めて投稿いたします。SwingのJProgressBarを使った不確定進捗バーについて、どうしても意図通りに動かせないので、お知恵を拝借したいと思います。
やりたいことは、あるユーザイベントをトリガとして、不確定進捗バーのアニメーションが始まるようにすることです。下のサンプルプログラムだと、ウィンドウが開いた時点でアニメーションが始まってしまいます。これを、最初はアニメーションをしていない(バーだけが見えている)状態から、ボタンを押すとアニメーションが始まるようにしたいのです。
SwingUtilities.invokeLater()の中でsetIndeterminate()を呼び出す等、試してみたのですが、うまくいきません。原理的に無理(そもそもこのアニメーションのスレッドはイベントディスパッチスレッドから制御できない、とか)なら諦めますが、何か解決策がありそうなら、ご教示願えれば幸いです。おそらく同じようなことで悩んだ方がおられる可能性を期待しつつ。
-----
コード:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class JProgressBarTest extends JFrame {
  public static void main(String[] args){
    JProgressBarTest obj = new JProgressBarTest();
    obj.setSize(400,100);
    obj.setVisible(true);
  }
  JProgressBarTest(){
    final JProgressBar jpb=new JProgressBar();
    jpb.setIndeterminate(true);    /* 不確定進捗バーのアニメーション開始 */
    JButton b =new JButton("PRESS!");
    JPanel p = new JPanel();
    p.add(jpb); p.add(b);
    b.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
	jpb.setIndeterminate(!jpb.isIndeterminate()); /* アニメーションの停止/開始を切り替え */
      }
    });
    getContentPane().add(p,BorderLayout.CENTER);
  }
}

nekoyama
ベテラン
会議室デビュー日: 2005/03/12
投稿数: 71
投稿日時: 2005-08-31 11:49
13行目をコメントアウトすれば意図した動作になりませんか?
//jpb.setIndeterminate(true); /* 不確定進捗バーのアニメーション開始 */
ぶち
会議室デビュー日: 2005/08/31
投稿数: 5
投稿日時: 2005-08-31 12:29
引用:

未記入さんの書き込み (2005-08-31 11:49) より:
13行目をコメントアウトすれば意図した動作になりませんか?
//jpb.setIndeterminate(true); /* 不確定進捗バーのアニメーション開始 */



すみません、書き忘れていましたが、それだとボタンを押した時に、不確定進捗バーの見栄え(Mac OS Xの場合、青と白の斜め縞模様)にはなるのですが、アニメーション(Mac OS Xの場合、床屋のサインポール状態)にならないのです。13行目を入れておくと、最初に起動した時点からアミメーションが始まっていて、ボタンを押すたびにそれが停止/再開します。
これも書き忘れていましたが、こちらの環境は Mac OS X 10.4.2+J2SE SDK 5.0 PR1です。
ぶち
会議室デビュー日: 2005/08/31
投稿数: 5
投稿日時: 2005-08-31 12:50
引用:

ぶちさんの書き込み (2005-08-31 12:29) より:

すみません、書き忘れていましたが、それだとボタンを押した時に、不確定進捗バーの見栄え(Mac OS Xの場合、青と白の斜め縞模様)にはなるのですが、アニメーション(Mac OS Xの場合、床屋のサインポール状態)にならないのです。



たびたびですみません、自己フォローですが、MacOS X 10.4.2上のJ2SE SDK 5.0でコンパイルしたクラスファイルを、試しにWindows XP上のJ2SE 5.0で実行してみたら、ちゃんと意図通りボタンを押した時点からアニメーションしますね…(泣)。MacOS X 上のJavaで、この現象を回避する方法をご存知の方はいらっしゃいませんでしょうか。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2005-08-31 13:01
引用:

ぶちさんの書き込み (2005-08-31 12:29) より:
13行目を入れておくと、最初に起動した時点からアミメーションが始まっていて、ボタンを押すたびにそれが停止/再開します。
これも書き忘れていましたが、こちらの環境は Mac OS X 10.4.2+J2SE SDK 5.0 PR1です。


JProgressBar の詳細は良くは知らないのですが、もしその13行目でうまくいくのならば、ボタンを押して停止することを自動化してしまうのが簡単だと思います。
たとえば JFrame の addNotify をオーバーライドしてその中で、 setIndeterminate(false) してみてはどうでしょう。
1

スキルアップ/キャリアアップ(JOB@IT)