| 
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||
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 内の dispatchKeyEventjava.awt.DefaultKeyboardFocusManager 内の dispatchKeyEvente - 
protected void enqueueKeyEvents(long after,
                                java.awt.Component untilFocused)
java.awt.DefaultKeyboardFocusManager 内の enqueueKeyEventsafter - untilFocused - 
  | 
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||