- PR -

SWING : action中にはrepaintされませんか。

1
投稿者投稿内容
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-09-09 09:35
お世話になります。

SWINGを始めたばかりの者です。

ボタンを押したらステータスを表示するラベルに「処理中」って出したいです。
Antionの最中にはRepaintされないですか。

下記のようにしましたが結局再表示されなくて処理が終わったあとに「終了」は表示されましたが。。。

さてステータスを表示するComponentはないでしょうか。 Labelしかありませんか。

イベントより重くて優先順位が低いからイベントが終わった後に表示されますね。

ステータスを表示する他の方法はないでしょうか。

色々質問して申し訳ありません。

宜しくお願いします。



ActionListener()
{
public void actionPerformed(ActionEvent event)
 {

  label_prc.setText("処理中");
  label_prc.repaint();
  //処理
  label_prc.setText("終了");




[ メッセージ編集済み 編集者: MUSE 編集日時 2004-09-09 10:04 ]
a-san
ベテラン
会議室デビュー日: 2004/06/01
投稿数: 53
投稿日時: 2004-09-09 12:47
Swingはシングルスレッドでイベントを処理するので、1つのActionが終わらないと
再描画されません。
重い処理を行うのであれば、別スレッドで実行すべきでしょう。
それと別スレッドからSwingのAPIを呼ぶ場合は、SwingUtilitiesクラスの
invokeLater() か invokeAndWait()を使います。
ココに簡単なサンプルを書いてます。
http://www.hcn.zaq.ne.jp/no-ji/javamemo/javax_swing_SwingUtilities.html

ステータスバーはありません。
ただ単にテキストだけを表示するだけなら、JLabelをBorderLayoutのSOUTHに貼り付ければ
いいでしょう。
MFCみたいにいろんなペインをつけたいのであれば、ステータスバー用のレイアウトマネージャを
自分で作るしかありません。
私は以下のように作りました。
http://www.hcn.zaq.ne.jp/no-ji/figure/index.html
1

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