|
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Objectjava.awt.KeyboardFocusManager
java.awt.DefaultKeyboardFocusManager
jp.ne.mki.wedge.education.focusmanager.EnqueueNoWaitKeyboardFocusManager
public class EnqueueNoWaitKeyboardFocusManager
JDK1.5.0_10以降 (2007/06/05現在 JDK1.5.0_11,12 も含む) のJDKを使用した場合、
フォーカスを取得していないComponentに対して、KeyEventが処理されComponent
に反映してしまう現象が発生します。
この現象は、重い処理中(メインスレッドにて何かの処理中)に、TABにてFocus移動を含んだ
KEY入力を行った際に、テキストのフォーカス移動"後" (After処理後) に Keyが反映されるという
不具合を招くことになり、内部データと表示データとの整合性が合わない という現象になって
現れます。
JDK1.5.0_10での変更の詳細については、Javaネイティブコードに達する為、詳細把握はできていませんが、、
DefaultKeyboardFocusManager.enqueueKeyEvents(long, Component)
の
第一引数の long の時間を、DefaultKeyboardFocusManager.dispatchKeyEvent(KeyEvent)
のタイミングの InputEvent.getWhen()
の値に置き換える処理を組み込むことにより、
JDK1.5.0_09以前の動きと擬似的に同じできるのを確認し、このクラスでは その処理を組み込んだ
KeyboardFocusManagerになります。
但し、この対応方法は、根本的な解決ではないため、これによる副作用がある可能性があります。
(製品のテストケースは全て通るのは確認していますが、予想外の副作用が潜んでいる可能性があります。)
このJDK1.5.0_09とJDK1.5.0_10との挙動の差は JDK1.5.0_10 のリリースノートに記述されている、 バグID:6448190 「JFrame と JButton でフォーカスの問題」 での修正に依るものと考えられますので、 その修正よる不具合解決はできなくなる可能性があります。
JDK1.5.0_10,11 にて InputVerifier
にて、waitをかけている間に
TABでのFocus移動を含んだKEY操作を行った場合でも
InputVerifier.verify(javax.swing.JComponent)
がCallされた後に Text上にKEYが反映される
ため、InputVerifier.verify(javax.swing.JComponent)
にて正確にチェックが行えない
という現象を確認しています。(JDK1.5.0_10,JDK1.5.0_11,JDK1.6.0,JDK1.6.0_01にて確認)
そのためこの現象はJavaSwingの不具合になります。
新しいJDKがリリースされて、この不具合が解決された場合、このKeyboardFocusManagerクラスを設定せずとも
不具合が解消される可能性があります。
使用にあたって (利用許諾)
このライブラリはフリーソフトウェアです。
このライブラリは役に立つことを願って配布しますが、完全 無保証 です。
本ライブラリを利用して損害が発生した場合、当社は一切の責任を負いません。
ある特定条件下(タイミング、製品・JDKバージョン)では動作不良を招くなどの可能性もありますので、
使用有無判断/テスト は自己責任でお願いします。
このライブラリは 製品サポート の対象外になります。
お問い合わせには一切応じかねますので予めご了承ください。
フィールドの概要 |
---|
クラス java.awt.KeyboardFocusManager から継承されたフィールド |
---|
BACKWARD_TRAVERSAL_KEYS, DOWN_CYCLE_TRAVERSAL_KEYS, FORWARD_TRAVERSAL_KEYS, UP_CYCLE_TRAVERSAL_KEYS |
コンストラクタの概要 | |
---|---|
EnqueueNoWaitKeyboardFocusManager()
|
メソッドの概要 | |
---|---|
boolean |
dispatchKeyEvent(java.awt.event.KeyEvent e)
dispatchKeyEvent |
protected void |
enqueueKeyEvents(long after,
java.awt.Component untilFocused)
enqueueKeyEvents |
クラス java.awt.DefaultKeyboardFocusManager から継承されたメソッド |
---|
dequeueKeyEvents, discardKeyEvents, dispatchEvent, downFocusCycle, focusNextComponent, focusPreviousComponent, postProcessKeyEvent, processKeyEvent, upFocusCycle |
クラス java.awt.KeyboardFocusManager から継承されたメソッド |
---|
addKeyEventDispatcher, addKeyEventPostProcessor, addPropertyChangeListener, addPropertyChangeListener, addVetoableChangeListener, addVetoableChangeListener, clearGlobalFocusOwner, downFocusCycle, firePropertyChange, fireVetoableChange, focusNextComponent, focusPreviousComponent, getActiveWindow, getCurrentFocusCycleRoot, getCurrentKeyboardFocusManager, getDefaultFocusTraversalKeys, getDefaultFocusTraversalPolicy, getFocusedWindow, getFocusOwner, getGlobalActiveWindow, getGlobalCurrentFocusCycleRoot, getGlobalFocusedWindow, getGlobalFocusOwner, getGlobalPermanentFocusOwner, getKeyEventDispatchers, getKeyEventPostProcessors, getPermanentFocusOwner, getPropertyChangeListeners, getPropertyChangeListeners, getVetoableChangeListeners, getVetoableChangeListeners, redispatchEvent, removeKeyEventDispatcher, removeKeyEventPostProcessor, removePropertyChangeListener, removePropertyChangeListener, removeVetoableChangeListener, removeVetoableChangeListener, setCurrentKeyboardFocusManager, setDefaultFocusTraversalKeys, setDefaultFocusTraversalPolicy, setGlobalActiveWindow, setGlobalCurrentFocusCycleRoot, setGlobalFocusedWindow, setGlobalFocusOwner, setGlobalPermanentFocusOwner, upFocusCycle |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
コンストラクタの詳細 |
---|
public EnqueueNoWaitKeyboardFocusManager()
メソッドの詳細 |
---|
public boolean dispatchKeyEvent(java.awt.event.KeyEvent e)
java.awt.KeyEventDispatcher
内の dispatchKeyEvent
java.awt.DefaultKeyboardFocusManager
内の dispatchKeyEvent
e
- protected void enqueueKeyEvents(long after, java.awt.Component untilFocused)
java.awt.DefaultKeyboardFocusManager
内の enqueueKeyEvents
after
- untilFocused
-
|
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |