- - PR -
Swing での項目遷移時の動き
1
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-10-19 23:50
お世話になります。
Swing でテキストフィールドにフォーカスしたときの動きを Windows と同様にする方法について詰まっています。 通常のWindowsアプリでは、[TAB]でテキストに遷移すると、 現在入力されている値が選択状態になり、マウスを使って テキストに遷移すると、選択状態にはなりません。 これと同じ動きを Swing で実装するにはどうすればよいでしょうか。 FocusListener で selectAll() するとマウス遷移時にも 全て選択されてしまいますし、これと同時に MouseListener も add しても selectAll() が動いてしまいます。 またこの場合、すでに入力されている文字列の真中あたりをマウスで クリックした時に、ここにカーソルを持ってくる方法がわかりません。 どなたかご教示お願いします。 | ||||||||||||
|
投稿日時: 2003-10-20 11:11
<TAB>キーの入力を、フォーカスの移動のみしか使用しないのであれば、KeyListener#keyPressedで監視すればできそうな気がする。
Caretの監視はCaretListenerで行う事ができます。 詳細は、API referenceなどで、確認してください | ||||||||||||
|
投稿日時: 2003-10-20 20:43
回答ありがとうございます。
これは、全てのテキスト項目に KeyListener を Add するということ でしょうか? 話がずれますが、フォーカスの場所にかかわらず特定のキーを リスニングするようにするにはどうすればよいでしょう? 例えば、フォーカスがどこにあっても [F12] が押されたら ウィンドウをクローズするとか。
うーん、これしかないですかねぇ。 FocusListener で文字列を selectAll() させなければ、デフォルトの動作で 全く問題ないようなきがするのですが。。。 // [ メッセージ編集済み 編集者: ボア 編集日時 2003-10-20 20:45 ] | ||||||||||||
|
投稿日時: 2003-10-20 21:41
はじめまして、想馬といいます。
Tabキーで独自の操作をしたい場合は、JTextFieldは注意が必要です。 JTextFieldにリスナーとして、KeyAdapter等を追加してもTabキーをイベントとして取得しません。 isManagingFocus、processKeyEventをオーバーライドしたJTextFieldクラスを作成する必要があります。 | ||||||||||||
|
投稿日時: 2003-10-20 22:40
お世話になっております。
javax.swing.FocusManagerなんてのはいかがでしょうか? って、JDK1.4からはjava.awt.KeyboardFocusManagerになるんですね。 普段使っているのが、いまだに1.2.2なのでKeyboardFocusManagerは 使用したことがありませんが、 FocusManager#processKeyEvent(Component,KeyEvent)を使用して ファンクションキー押下→対応するActionPerformed発動 というような処理を使用したことがあります。 | ||||||||||||
|
投稿日時: 2003-10-21 15:43
これは知りませんでした。この当たりのややこしさがswingの理解を阻害しているような気がします。
なんだかややこしそうな実装だったので敬遠していたのですが、API ref.を眺めていて、java.awt.KeyEventDispatcherを登録する事で、処理を委譲できるとのことなので、試しに実装してみました。
Tabキーによるfocus traverseのみ全選択するようになりました。 ただし、syoさんがおっしゃっているようにjava.awt.KeybordFocusManagerがj2se1.4以降であること、及び、すべてのJTextFieldが同挙動になることに注意する必要があります。 なかなか勉強になるスレッドでした。 # 修正:提示したコードにおいて、外側のinstanceofチェックは不要なのでcomment outした # 追加: KeybordFocusManager.dispatchKeyEvent()は常にtureを返すので、返り値のチェックは多分いらないです。 [ メッセージ編集済み 編集者: かずくん 編集日時 2003-10-21 16:06 ] [ メッセージ編集済み 編集者: かずくん 編集日時 2003-10-21 16:17 ] | ||||||||||||
1
