EDIT: Sorry, das ist wohl schon bekannt: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6383397
"State 11-Closed, Will Not Fix, bug " - Danke ... :?
Hallo
Wenn man auf das Drücken der ALT-Taste (nicht ALT-Gr) hören will, kommt irgendwie nur jedes zweite Mal der Event an. (Win XP, Java6u10). Habe schon alle möglichen Ansätze probiert: Vom klassischen KeyListener bis hin zu einer eigenen EventQueue. Die Ansätze können durch umkommentieren der test*-Zeilen hier durchprobiert werden:
Überall ist die Ausgabe analog, wenn man zwei mal hintereinander ALT drückt:
Key event java.awt.event.KeyEvent[KEY_PRESSED,keyCode=18,keyText=Alt,keyChar=Undefined keyChar,modifiers=Alt,extModifiers=Alt,keyLocation=KEY_LOCATION_LEFT] on frame0
Key event java.awt.event.KeyEvent[KEY_RELEASED,keyCode=18,keyText=Alt,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_LEFT] on frame0
Key event java.awt.event.KeyEvent[KEY_RELEASED,keyCode=18,keyText=Alt,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_LEFT] on frame0
Dazwischen fehlt ein KEY_PRESSED Event
ALT ist ja eine ziemlich "besondere" Taste - eigentlich aktiviert man damit das Menü. Aber in diesem Fall gibt es kein Menü, und selbst wenn, dann wäre das kein Grund, schon auf EventQueue-Ebene das "KEY_PRESSED" zu verschlucken....
Ist das ein Bug, ein Feature, L&F- oder Betriebssystemspezifisch....? Und vor allem: Hat jemand eine Idee, was man dagegen machen kann?
"State 11-Closed, Will Not Fix, bug " - Danke ... :?
Hallo
Wenn man auf das Drücken der ALT-Taste (nicht ALT-Gr) hören will, kommt irgendwie nur jedes zweite Mal der Event an. (Win XP, Java6u10). Habe schon alle möglichen Ansätze probiert: Vom klassischen KeyListener bis hin zu einer eigenen EventQueue. Die Ansätze können durch umkommentieren der test*-Zeilen hier durchprobiert werden:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class AltTest extends JFrame
{
public static void main(String args[])
{
new AltTest().setVisible(true);
}
public AltTest()
{
setSize(100,100);
//testKeyListener();
//testKeyEventDispatcher();
//testEventListener();
testEventQueue();
}
void testKeyListener()
{
addKeyListener(new KeyListener()
{
public void keyPressed(KeyEvent e)
{
System.out.println("keyPressed "+e);
}
public void keyReleased(KeyEvent e)
{
System.out.println("keyReleased "+e);
}
public void keyTyped(KeyEvent e)
{
System.out.println("keyTyped "+e);
}
});
}
void testKeyEventDispatcher()
{
KeyEventDispatcher keyEventDispatcher = new KeyEventDispatcher()
{
public boolean dispatchKeyEvent(KeyEvent keyEvent)
{
System.out.println("Key event "+keyEvent);
return false;
}
};
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(keyEventDispatcher);
}
void testEventListener()
{
AWTEventListener layoutKeyListener = new AWTEventListener()
{
public void eventDispatched(AWTEvent event)
{
System.out.println("Key event "+event);
}
};
Toolkit.getDefaultToolkit().addAWTEventListener(layoutKeyListener, AWTEvent.KEY_EVENT_MASK);
}
void testEventQueue()
{
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
eventQueue.push(new EventQueue()
{
public void dispatchEvent(AWTEvent awtEvent)
{
if (awtEvent instanceof KeyEvent)
{
System.out.println("Key event "+awtEvent);
}
super.dispatchEvent(awtEvent);
}
});
}
}
Überall ist die Ausgabe analog, wenn man zwei mal hintereinander ALT drückt:
Key event java.awt.event.KeyEvent[KEY_PRESSED,keyCode=18,keyText=Alt,keyChar=Undefined keyChar,modifiers=Alt,extModifiers=Alt,keyLocation=KEY_LOCATION_LEFT] on frame0
Key event java.awt.event.KeyEvent[KEY_RELEASED,keyCode=18,keyText=Alt,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_LEFT] on frame0
Key event java.awt.event.KeyEvent[KEY_RELEASED,keyCode=18,keyText=Alt,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_LEFT] on frame0
Dazwischen fehlt ein KEY_PRESSED Event
ALT ist ja eine ziemlich "besondere" Taste - eigentlich aktiviert man damit das Menü. Aber in diesem Fall gibt es kein Menü, und selbst wenn, dann wäre das kein Grund, schon auf EventQueue-Ebene das "KEY_PRESSED" zu verschlucken....
Ist das ein Bug, ein Feature, L&F- oder Betriebssystemspezifisch....? Und vor allem: Hat jemand eine Idee, was man dagegen machen kann?