- - PR -
画面操作を無効にする方法
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-05-21 20:36
OSはWin XP
javaのバージョンはj2sdk-1.4.2を使用しています。 swingを使用しアプリケーションの開発を行っています。 処理を行っている間、マウスカーソルを砂時計に設定しているのですが、 文字の入力やボタン押下などの操作が行えてしまいます。 処理中は、画面での編集などをできないようしたいと考えています。 GlassPaneを表示することにより、マウスイベントを無効にできたのですが、 キー入力を無効にすることができません。 キー入力を無効にする方法がありましたら、ご教授お願します。 | ||||||||
|
投稿日時: 2004-05-21 21:21
極悪な方法として、EventDispatchThreadをとめちゃうとか。
おそらく別Threadで処理を実行していると思われるので、 Thred#joinで処理が終わるまで、止めることができたような。 EventDispatchThreadをブロックして、どうなるかは、まったく想像がつきません。あしからず。 | ||||||||
|
投稿日時: 2004-05-22 10:23
さくらさん、こんにちは。
java.awt.Componentの setEnabled(boolean) を使えば、 ユーザ入力を止めたり、再開したりできると思います。 | ||||||||
|
投稿日時: 2004-05-22 12:04
unibon です。こんにちわ。
うろ覚えですが、AWT や Swing だと http://java-house.jp/ml/archive/j-h-b/041529.html のように Component の親子関係を辿って、すべての Component について setEnabled(false) をしなければいけなかったかもしれません。確かめてはいないのですが。 #これはあまりにも大変なので、ひょっとしたら新しいバージョンならばなにか便利な API があるのかもしれません。 | ||||||||
|
投稿日時: 2004-05-24 01:18
すみません、忘れてました。 お詫びの標しに、再帰的に enable/disableするユーティリティ載せておきます。
念の為、Container, Component は java.awtパッケージのクラスです。 また、クラスメソッドにしてありますが、使い方によっては外しても 構いません。 注意:必要なら改良してください。 ・フォーカスがある JTextAreaなどのカーソルは点滅を続けます。 ・スレッドセーフではありません。 [ メッセージ編集済み 編集者: Kissinger 編集日時 2004-05-24 01:20 ] | ||||||||
|
投稿日時: 2004-05-24 10:09
レスありがとうございます。
Kissingerさんに教えていただいたユーティリティを試してみました。 結果は、全てのコンポーネントに対して、setEnabledの設定がされ使用不可 にすることができました。 今後ともよろしくお願いいたします。ありがとうございました。 | ||||||||
|
投稿日時: 2004-05-24 10:15
モーダルなJDialogで「お待ちください」表示をして
入力をブロックするのもいいと思いますよ。 | ||||||||
|
投稿日時: 2004-05-24 10:33
JDialogをモーダルで表示した場合、
show()以降の処理が、ダイアログが終了するまで 実行されませんでした。 処理中は、モーダルダイアログを表示しておき、 処理終了後、ダイアログを終了する。 というようなことができるのでしょうか? | ||||||||
