2009-07-05

Write once, test everywhere

Nach einer kurzen Pause, die ich unter anderem dazu genutzt habe, mein brandneues 2,8 GHz-MacBook Pro einzurichten :-), melde ich mich mit einer interessanten Detektivgeschichte zurück.

Hätten Sie vermutet dass Java unter Mac OS X 10.5 die Escape-Taste verschluckt?

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class KeyEventTest {

public static void main(String[] args) {
JFrame f = new JFrame("KeyEventTest");
JTextField textfield = new JTextField(20);
textfield.addKeyListener(new KeyListener() {

public void keyTyped(KeyEvent e) {
System.out.println("typed: "
+ Integer.toString(e.getKeyChar()));
}

public void keyReleased(KeyEvent e) {
System.out.println("released: " + e.getKeyCode());
}

public void keyPressed(KeyEvent e) {
System.out.println("pressed: " + e.getKeyCode());
}
});
f.getContentPane().add(textfield);
f.pack();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}

Wenn Sie das Programm unter Vista ausführen und die Escape-Taste drücken, werden wie erwartet drei Meldungen ausgegeben. Auf dem Mac hingegen fehlt keyTyped(). Irgendwo wird das Ereignis also konsumiert. Wo das Ganze passiert, werde ich hoffentlich bald heraus gefunden haben.