|
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
|