NoAltKeyEventPostProcessor Class

com.bea.ide.util.swing
NoAltKeyEventPostProcessor Class

public class NoAltKeyEventPostProcessor

    extends Object
    implements KeyEventPostProcessor

The NoAltKeyEventPostProcessor class sovles the problem that a default Swing implementation of a dialog or message box requires the ALT key to be down in order for any mnemonics to work. Users accustomed to Windows applications expect that the ALT key is not necessary unless the focus is in a control that consumes normal keystrokes (such as a text field). By registering ourselves with the KeyboardFocusManager, we get told about all keyboard events (globally). We look at each keyPressed, keyTyped, and keyReleased event. When we see a set of those go by for the same key where the pressed and typed events were not consumed by any handlers, we step in. If in the course of watching we see any keyPressed or keyTyped events that are consumed by another listener, we reset our state and start over again. This way, typing in a text field or the like never triggers us. Note that it is ok if the keyReleased event is consumed, because the default Swing implementation of a mnemonic is to handle (consume) the keyPressed and keyReleased events for Alt+[key], as well as just the keyReleased event for plain [key]. This way, if the user releases Alt before [key] the mnemonic still works. However, it only works if it first receives the keyPressed event. Once we see an un-handled key, we construct new keyPressed and keyReleased events where we fake that the ALT key is depressed. We resend these keystrokes to give the mnemonics another chance. There is one significant hurdle with this approach. If more than one post- processor is running at the same time, nothing works. Even if the other post-processors are associated with different components. I'm not sure why this is. The solution is to uninstall any existing post-processor when a new one is installed, and then to reinstall it (if it's still valid) when the current one is uninstalled. This also solves the problem that some classes do not or can not uninstall us themselves.


Hierarchy
Object
  NoAltKeyEventPostProcessor
All Implemented Interfaces

KeyEventPostProcessor

Constructor Summary

NoAltKeyEventPostProcessor(JComponent comp)

 

Method Summary

public void
install()
Register this post processor with the KeyboardFocusManager.
public boolean
postProcessKeyEvent(KeyEvent e)
Process all key events (after all other key event listeners have had their chance).
public void
uninstall()
Uninstalls this post-processor.
 
Methods from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
   
Methods from interface java.awt.KeyEventPostProcessor
postProcessKeyEvent
 

Constructor Detail

NoAltKeyEventPostProcessor

public NoAltKeyEventPostProcessor(JComponent comp)
 

Method Detail

install() Method

public void install()
Register this post processor with the KeyboardFocusManager.


postProcessKeyEvent(KeyEvent) Method

public boolean postProcessKeyEvent(KeyEvent e)
Process all key events (after all other key event listeners have had their chance).


uninstall() Method

public void uninstall()
Uninstalls this post-processor. Reinstalls any other post-processor which we preempted.