プログラムの進化。

今は2つ目のツール依頼を行っている。
前回は技術的な部分で苦労しつつ作っていたので、正直周辺部分の出来は良くない。

今回は、すでに技術的な部分のほとんどはクリアしているので、
周辺部分にも気を遣うようになったら、正直、前回のツールがゴミに思えてきた…(苦笑)

で、今回修正したてんについて。

・JTextFieldの入力で、なぜか初期値が日本語になる
 アカウント情報とか確実に全角じゃないものは、OFFにすべきだよなぁ。

 ⇒ FocusListenerを実装して、focusGaindがコールされたときに、
   ((JComponent)e.getSource()).getInputContext().setCharacterSubsets(null);
   でOK。

・JTextFieldの入力でリターンキーが押されたら次の入力へフォーカスを移動させているが、
 IMEの漢字変換を確定させたときにも移動してしまう。

 ⇒ keyListerでリターンキーを検出するのではなく、actionListenerを実装すれば、
 JTextFieldで入力を確定したときだけを検出できる。

その他、インスタンス周りもかなり整理されてるのだが、
上記はユーザビリティに関わってくるので、今からでも直したいなぁ…。


補足。
JTextFiledの件は、そのままでは不具合になることが発覚。

大抵の場合、テキスト入力の後に、何かしらのボタンがあるわけで、
私の場合は、最後の入力から、そのボタンにフォーカスを移動し、
ボタンでリターンキーを押すとボタンを押したことになるように設定していた。
(全てキーボードで操作できるように)

ところが、最後の入力で、actionEventが発生しすると同時にkeyEventも発生し、
フォーカスがボタンに移動した後に、キーイベントが処理されてしまうのだ。
つまり、最後のテキストフィールドでリターンキーを押すと、ボタンまで押されてしまうことに。

とりあえず、今はフラグを使って制御してみたが、
このフラグは、ActionListener⇒KeyListenerの順に処理されることが前提。
果たしてこれは、どの環境でも保障されているのだろうか?

やはり調べてみると、イベントの処理順に依存するコードはダメなようだ(当たり前だが)
ただ、現状の私のプログラムは、キーイベントは keyReleased()に記述してある。

つまり、リターンキーを「押した」イベントと「離した」イベント順が逆になることはほぼ無いだろう。
なので、良い方法が思いつくまでは、このままということで。
[PR]
by miries | 2010-12-19 04:18 | ゲームを作る


<< マックナゲットにはまる。 アプリ改造。 >>