Ich habe in einer Anwendung mit Swing-Oberfläche eine Navigation (erzeugt über Menüpunkte) erzeugt, die leider nicht funktioniert, wenn der Fokus auf einer JEditorPane
liegt.
Meine Idee war jetzt, bei der JEditorPane
einen JKeyListener
zu hinterlegen, der je nachdem, ob meine KeyEvent
s von der globalen Navigation behandelt werden sollen, die KeyEvent
s dann an eben diese weitergibt und anderenfalls normal von der JEditorPane
behandelt werden:
@Override
public void keyTyped(KeyEvent e) {
int modifier = e.getModifiers();
int keyCode = e.getKeyCode();
boolean found = false;
for (KeyStroke keyStroke : DROP_KEY_STROKES) {
int ksModifier = keyStroke.getModifiers();
int ksKeyCode = keyStroke.getKeyCode();
if (keyCode == ksKeyCode && modifier == ksModifier) {
found = true;
break;
}
}
if (found) {
// KeyEvent an die normale Navigation durchlassen, wie?
System.out.println("gefunden: " + keyCode + " - " + modifier);
}
else {
// KeyEvent von der editorPane behandeln lassen, wie?
System.out.println("Nicht gefunden: " + keyCode + " - " + modifier);
//editorPane.processKeyEvent(e); ist nicht sichtbar
}
}
});
Allerdings mangelt es mir an den Möglichkeiten der Weiterreichung. Ich habe schon eine ganze Menge dazu gegoogelt, aber vermutlich mit den falschen Stichworten. editorPane.processKeyEvent(e)
ist nicht sichtbar, und ich weiß auch nicht, ob das der richtige Weg wäre.
Alles was ich eigentlich nur in der JEditorPane zulassen muss, ist Textmarkierung und Ctrl-V und Ctlr-C. Dummer Weise muss sie dafür den Fokus bekommen können, sonst kann man den Text nicht markieren. Dadurch fängt sie dann auch automatisch meine Navigationsbefehle ab.
Dafür gibt es doch bestimmt eine Lösung. Nur welche?
Ausgegeben wird immer nur Nicht gefunden: 0 - 0
, egal welche nicht gefangene Taste ich gedrückt habe. Drücke ich einige der Tasten, die ich durchlassen will, geschieht das gewünschte Verhalten, bei anderen passiert gar nichts, auch keine Ausgabe. Das wirkt alles sehr wirr.
Eigentlich war das nur ein kleiner Schhönheitsfehler, den ich noch beheben wollte, der nun solche Probleme macht. Bevor ich jetzt auch noch ein kleines, ausführbares Beispiel zusammenbastel, es dann aber nur das richtige Suchstichwort war, das mir fehlte, frage ich euch erstmal so. Anderefalls reich ich das aber gern auch noch nach.