Q18:マウスカーソルの変更について
Q18-1:
検索処理で時間がかかるので各フレームに対して検索処理の前にマウスカーソルを砂時計に変更し、検索処理が終了した時に標準のマウスカーソルに戻しています。
検索中にマウスをフレーム外に移動すると標準のマウスカーソルになり、再度フレーム内にマウスを移動するとマウスが変更されません。検索中はフレームのマウスモーションイベントに検索中であればマウスカーソルを砂時計にする処理を入れていますが、検索中にはそのイベントは発生しないようです。
検索処理を別スレッドで処理を行うように変更しないといけないのでしょうか?
A18-1:
検索処理中は処理が終わるまで、処理待ち状態になっていると推測されます。マウスの形状は[フレーム]コンポーネントのsetCursor(cursor)メソッドで設定され、一旦変更するとその後、再度setCursor(cursor)で設定されるまで変更されないので検索処理開始直前(例:ボタンを押下直後)に待ち状態のカーソル形状に変更し、検索終了直後(例:[データベースアクセス]コンポーネントからデータ生成イベント発生時)に標準のカーソル形状に変更するというのではいかがでしょうか。マウスモーションイベントには、特に処理を設定する必要はないと思われます。
Q18-2:
@検索ボタンをクリック
Aマウスカーソルを砂時計に変更する
B検索処理を開始する。
Cマウスカーソルをフレームの外へ移動する。(この間、検索処理中)
(自動的に矢印に戻ります。)
Dマウスカーソルをフレーム内へ移動する。(この間、検索処理中)
(矢印のままで、砂時計にならない。)
E検索処理が終了する。
(マウスモーションイベントは、検索処理が終了まで発生しない。)
A18-2:
最初にカーソルの形状を変更しておけば、通常はフレーム上にある時は変更後の形状になりますが、検索処理実行中はフレームでマウスの動きを捉えることができず、マウスカーソルの表示をリアルタイムで制御することができない場合があります。
ご指摘の通り、検索処理は別スレッドで実行して頂くと、ほぼ改善されます。但し処理のタイミング等により、100%制御可能という訳ではありません。
次善の策として、検索中はフレームのタイトルバーに文字を入れる、フレームの色を変更するなどが考えられます。