|
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Objectjava.awt.KeyboardFocusManager
java.awt.DefaultKeyboardFocusManager
javax.swing.FocusManager
javax.swing.DefaultFocusManager
jp.ne.mki.wedge.education.focusmanager.RestrictContinuousKeyEvent
public class RestrictContinuousKeyEvent
JButtonに対する連続したKey操作による多重Action発火を抑制するFocusManagerのSample。
時間がかかるActionが設定されたButtonActionを 発火するためのKeyが連打された場合には、 「実際にKeyが押下された時間」と「押下Eventがdispatchされる時間」 に差が出ます。dispatchされる時間は「Actionが動作し終わった後」 となるため、この二つの時間差を判断して、差がある一定量よりも 大きい場合に2重発火とみなすという方法です。
フィールドの概要 | |
---|---|
protected int |
delayLimit
遅延とみなす時間[ms]。 |
protected java.text.SimpleDateFormat |
df
Log出力用。 |
クラス javax.swing.FocusManager から継承されたフィールド |
---|
FOCUS_MANAGER_CLASS_PROPERTY |
クラス java.awt.KeyboardFocusManager から継承されたフィールド |
---|
BACKWARD_TRAVERSAL_KEYS, DOWN_CYCLE_TRAVERSAL_KEYS, FORWARD_TRAVERSAL_KEYS, UP_CYCLE_TRAVERSAL_KEYS |
コンストラクタの概要 | |
---|---|
RestrictContinuousKeyEvent()
|
メソッドの概要 | |
---|---|
boolean |
dispatchKeyEvent(java.awt.event.KeyEvent e)
KeyEventの発生元が「AbstractButton」だった場合に遅延の判断処理を行う。 |
クラス javax.swing.DefaultFocusManager から継承されたメソッド |
---|
compareTabOrder, getComponentAfter, getComponentBefore, getFirstComponent, getLastComponent |
クラス javax.swing.FocusManager から継承されたメソッド |
---|
disableSwingFocusManager, getCurrentManager, isFocusManagerEnabled, setCurrentManager |
クラス java.awt.DefaultKeyboardFocusManager から継承されたメソッド |
---|
dequeueKeyEvents, discardKeyEvents, dispatchEvent, downFocusCycle, enqueueKeyEvents, 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 |
フィールドの詳細 |
---|
protected int delayLimit
例
ButtonのActionとして2000msかかる処理があった場合。
つまりこの値が小さいほどより精度の高い抑制がされます。 しかしあまり小さすぎるとSpecの低いマシンでは「押下した時間」と 「dispathされる時間」に微妙な差が出たりするかもしれません。 その場合、特に時間がかかる処理が無くても、毎回「遅延している」 とみなされて常にButtonをKeyで押下出来なくなる可能性が あるかもしれません。
ちなみに、作成者のマシンでは「KeyPressedが発生した時間」と 「それがdispatchされる時間」は常に同じ値(全く遅延が無い状態)に なっていました。
protected java.text.SimpleDateFormat df
コンストラクタの詳細 |
---|
public RestrictContinuousKeyEvent()
メソッドの詳細 |
---|
public boolean dispatchKeyEvent(java.awt.event.KeyEvent e)
java.awt.KeyEventDispatcher
内の dispatchKeyEvent
java.awt.DefaultKeyboardFocusManager
内の dispatchKeyEvent
EventObject.getSource()
,
AWTEvent.getID()
,
KeyEvent.getKeyChar()
,
InputEvent.getWhen()
,
KeyEvent.KEY_PRESSED
,
DefaultKeyboardFocusManager.dispatchKeyEvent(java.awt.event.KeyEvent)
|
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |