1

2つのタブを持つ単純なJTabbedPaneコンポーネントがあります。一方のタブでボタンイベントが発生した場合、現在のビューをもう一方のタブにすぐに設定したいと思います。問題のボタンのactionPerformedメソッドでsetSelectedIndex(int)を使用して現在のタブを正常に切り替えることができますが、ボタンイベントの残りの機能が完了するまでに時間がかかる場合があります。

setSelectedIndex(int)の変更はすぐには発生せず、ボタンのクリック/押下によってトリガーされたactionPerformedメソッドの本体が完了したときにのみ発生するように見えます。

ボタンがクリック/押されたときにタブを切り替えたい理由は、ボタンの残りの部分がクリックされている間、ユーザーが他のタブのテキスト領域に「処理中です、お待ちください」などのメッセージを表示できるようにするためです。機能が実行されます。その機能の結果は、到着すると、「...お待ちください」というメッセージに置き換わります。

つまり、今起こっているのは、ボタンをクリックすると、ボタンの機能が完全に完了するまでそのタブでフリーズし、その後切り替わります。したがって、「...お待ちください」というメッセージは実際には表示されません。

どうしたらいいかわかりません。「機能」用の新しいスレッドを作成し、ボタンクリックイベントでスレッドを開始して、ボタンイベントが終了し、結果を待っている間にタブを切り替えることができるようにします。大声で考えているだけです。どんな助けでも大歓迎です。

-ロブ

4

1 に答える 1

2

何よりもスレッドの問題があるように思えます。これにより、GUIがフリーズし、完了するまでGUIが完全に応答しなくなり、タブ付きペインの交換が遅れます。アクション実行メソッドで長時間実行されるプロセスを実行している場合は、代わりにSwingWorkerによって提供されるようなバックグラウンドスレッドで実行すると、GUIの応答性が向上します。

詳細については、このチュートリアルを確認してください:Swingでの同時実行

このアドバイスにもかかわらず、まだ問題が発生している場合は、問題のあるコードの一部を投稿する必要があります。問題を再現するコンパイル可能で実行可能な小さなアプリ、 SSCCEを作成できれば最高です。

¡Quetengassuerte!

于 2011-04-17T13:55:51.860 に答える