Hallo,
ich arbeite an einem Str8ts-Programm. Für die Eingaben sind in der Klasse Str8tsBoard die Maus- und KeyListener über folgenden Code eingebunden:
Abgesehen von einer Ausnahme funktioniert alles bestens. Mit der Alt-Taste habe ich jedoch in einem Fall folgendes Problem:
Für die manuelle Eingabe einer neuen Str8ts-Aufgabe sollen die schwarzen Zellen bei gedrückter Alt-Taste durch einen Mausklick gesetzt beziehungsweise auch wieder gelöscht werden. Auch das funktioniert einwandfrei über folgenden Code:
Das Problem macht sich erst bemerkbar, wenn der Eingabemodus über eine Symbol-Schaltfläche verlassen werden soll und als letzte Aktion über einen Mausklick und die Alt-Taste eine schwarze Zelle (Sperrzelle) gesetzt wurde. In diesem Fall muss auf das Umschaltsymbol zweimal geklickt werden. Ursächlich dafür ist, dass der durch den Tastendruck auf die Alt-Taste erzeugte Event offensichtlich noch immer aktiv ist, obwohl er in der Methode myKeyPressed() über folgenden Code eigentlich verbraucht sein müsste:
Dass dieser Event noch "lebt" sieht man daraus, dass in der Menüzeile der erste Eintrag "Datei" aktiviert ist. Diese Aktivierung erfolgt immer dann, wenn die gedrückte Alt-Taste losgelassen wird, auch im Lösungsmodus, wenn zum Beispiel über die Alt- und eine Zifferntaste ein Filter gesetzt werden soll und die Alt-Taste vor der Zifferntaste losgelassen wird. Das ist aber dann ein Verhalten, wie es zu erwarten ist.
Warum wird trotz evt.consume() in myKeyPressed() das Alt-Tasten-Ereignis nicht als erledigt betrachtet, beziehungsweise, wie kann dies erreicht werden?
MfG, kodela
ich arbeite an einem Str8ts-Programm. Für die Eingaben sind in der Klasse Str8tsBoard die Maus- und KeyListener über folgenden Code eingebunden:
Java:
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent evt) {
myMousePressed(evt);
}
});
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent evt) {
myKeyPressed(evt);
}
});
Für die manuelle Eingabe einer neuen Str8ts-Aufgabe sollen die schwarzen Zellen bei gedrückter Alt-Taste durch einen Mausklick gesetzt beziehungsweise auch wieder gelöscht werden. Auch das funktioniert einwandfrei über folgenden Code:
Java:
if (evt.isAltDown() && !loesungsModus) {
evt.consume();
str.setzeSperrzelle(i);
repaint();
return;
}
Java:
if(evt.isAltDown())
if (loesungsModus) {
return;
}
else { // also Eingabemodus
evt.consume();
}
Warum wird trotz evt.consume() in myKeyPressed() das Alt-Tasten-Ereignis nicht als erledigt betrachtet, beziehungsweise, wie kann dies erreicht werden?
MfG, kodela