Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[platform-swt-dev] KeyEvent.character

Regarding this snippet

http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/platform-swt-home/sn
ippits/snippet25.html

(See at the bottom of the message for the code itself)

Why do I get this output when I press CTRL+something?

I pressed 
CTRL + A
CTRL + B
CTRL + P
And got
DOWN: stateMask=0x0, keyCode=0x40000, character=0x0 '\0'
DOWN: stateMask=0x40000 CTRL, keyCode=0x0, character=0x1 ''
UP  : stateMask=0x40000 CTRL, keyCode=0x0, character=0x1 ''
DOWN: stateMask=0x40000 CTRL, keyCode=0x0, character=0x2 ''
UP  : stateMask=0x40000 CTRL, keyCode=0x0, character=0x2 ''
DOWN: stateMask=0x40000 CTRL, keyCode=0x0, character=0x10 '' UP  :
stateMask=0x40000 CTRL, keyCode=0x0, character=0x10 '' UP  :
stateMask=0x40000 CTRL, keyCode=0x40000, character=0x0 '\0'

If I press 
ALT + A
ALT + B
ALT + P
I can see the character
DOWN: stateMask=0x0, keyCode=0x10000, character=0x0 '\0'
UP  : stateMask=0x10000 ALT, keyCode=0x0, character=0x61 'a'
UP  : stateMask=0x10000 ALT, keyCode=0x0, character=0x62 'b'
UP  : stateMask=0x10000 ALT, keyCode=0x0, character=0x70 'p'
UP  : stateMask=0x10000 ALT, keyCode=0x10000, character=0x0 '\0'

Moreover the javadoc and the code sais e.character is a char but
This: Integer.toHexString (e.character) works? Are char and int
interchangeable?
I have to do this to check if the cey combination is CTRL + A
If((e.character == (int) 'a' - 96) && (e.stateMask == SWT.ALT))
	// it's CTRL + a

Can anybody explain me why doesn't pressing CTRL + key work the same and
with ALT + key or SHIFT + KEY?

Thanks....

(Im working on winXP, but our target platform in pocketpc with windows.)


----- S N I P P E T -----
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;

public class Main {

public static void main (String [] args) {
	Display display = new Display ();
	Shell shell = new Shell (display);
	Listener listener = new Listener() {
		public void handleEvent(Event e) {
			String string = e.type == SWT.KeyDown ? "DOWN" :
"UP  ";
			string += ": stateMask=0x" +
Integer.toHexString(e.stateMask);
			if ((e.stateMask & SWT.CTRL) != 0) string += "
CTRL";
			if ((e.stateMask & SWT.ALT) != 0) string += "
ALT";
			if ((e.stateMask & SWT.SHIFT) != 0) string += "
SHIFT";
			if ((e.stateMask & SWT.COMMAND) != 0) string +=
" COMMAND";
			string += ", keyCode=0x" + Integer.toHexString
(e.keyCode);
			string += ", character=0x" + Integer.toHexString
(e.character);
			switch (e.character) {
				case 0: 		string += "
'\\0'"; break;
				case SWT.BS:	string += " '\\b'";
break;
				case SWT.CR:	string += " '\\r'";
break;
				case SWT.DEL:	string += " DEL"; break;
				case SWT.ESC:	string += " ESC"; break;
				case SWT.LF:	string += " '\\n'";
break;
				case SWT.TAB:	string += " '\\t'";
break;
				default:		string += " '" +
e.character +"'"; break;
			}
			System.out.println (string);
		}
	};
	shell.addListener(SWT.KeyDown, listener);
	shell.addListener(SWT.KeyUp, listener);
	shell.setSize (200, 200);
	shell.open ();
	while (!shell.isDisposed ()) {
		if (!display.readAndDispatch ()) display.sleep ();
	}
	display.dispose ();
}

} 


Back to the top