Duplicate :
|
|
Duplicate :
|
|
Relates :
|
|
Relates :
|
Here is a program that consumes KEY_TYPED events to prevent digits from being entered: import java.awt.*; import java.awt.event.KeyEvent; public class Consume extends TextArea { public Consume(){ enableEvents(-1); } public void processEvent(AWTEvent e){ if(e instanceof KeyEvent){ System.out.println(e+" getText: "+getText()); if(e.getID()==KeyEvent.KEY_TYPED){ char c = ((KeyEvent)e).getKeyChar(); if((c>='0')&&(c<='9'))((KeyEvent)e).consume(); } } } public static void main(String[] args){ Frame f = new Frame("No Numbers"); f.add("Center",new Consume()); f.pack(); f.show(); } } This functions properly on Windows but not on Solaris. Output from typing "A1" on Windows: java.awt.event.KeyEvent[KEY_PRESSED,keyCode=16,keyChar=''] on text0 getText: java.awt.event.KeyEvent[KEY_PRESSED,keyCode=65,keyChar='A',modifiers=Shift] on text0 getText: java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyChar='A'] on text0 getText: java.awt.event.KeyEvent[KEY_RELEASED,keyCode=65,keyChar='A',modifiers=Shift] on text0 getText: A java.awt.event.KeyEvent[KEY_RELEASED,keyCode=16,keyChar='',modifiers=Shift] on text0 getText: A java.awt.event.KeyEvent[KEY_PRESSED,keyCode=49,keyChar='1'] on text0 getText: A java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyChar='1'] on text0 getText: A java.awt.event.KeyEvent[KEY_RELEASED,keyCode=49,keyChar='1'] on text0 getText: A On Solaris - note that the text has already changed when the KEY_TYPED occurs, thus ignoring the consume(): java.awt.event.KeyEvent[KEY_PRESSED,keyCode=16,keyChar=''] on text0 getText: java.awt.event.KeyEvent[KEY_PRESSED,keyCode=65,keyChar='A',modifiers=Shift] on text0 getText: java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyChar='A'] on text0 getText: A java.awt.event.KeyEvent[KEY_RELEASED,keyCode=65,keyChar='A',modifiers=Shift] on text0 getText: A java.awt.event.KeyEvent[KEY_RELEASED,keyCode=16,keyChar='',modifiers=Shift] on text0 getText: A java.awt.event.KeyEvent[KEY_PRESSED,keyCode=49,keyChar='1'] on text0 getText: A java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyChar='1'] on text0 getText: A1 java.awt.event.KeyEvent[KEY_RELEASED,keyCode=49,keyChar='1'] on text0 getText: A1
|