Ich habe ein Problem mit setAccelerator()
. Im Moment habe ich den Code, der für Strg + X für DELETE funktioniert. Ich möchte das Shift + Delete auch für den gleichen JMenuItem
aktivieren.
Mein Code wie folgt:
%Vor%, aber das funktioniert nur für den Umschalt + Löschvorgang. Es scheint, dass es die Operation Strg + X überschreibt. Können wir beide Tastenanschläge gleichzeitig ausführen?
Bitte führen.
Ja, es kann gemacht werden. Hinter den Kulissen erstellt SetAccelerator () nur eine Schlüsselbindung, aber wie Sie bemerkt haben, ersetzt die zweite Bindung die erste.
Sie müssen also eine Aktion (nicht einen ActionListener) erstellen, um diese zum Menüelement hinzuzufügen. Lesen Sie den Abschnitt aus dem Swing-Lernprogramm zu Aktionen , um weitere Informationen zu erhalten. Nachdem Sie die Aktion erstellt haben, können Sie die Aktion mit einem anderen KeyStroke teilen, indem Sie manuell eine Schlüsselbindung erstellen. Sie können den Abschnitt aus dem Swing-Lernprogramm zu Verwenden von Tastenkombinationen für eine detaillierte Beschreibung lesen Erläuterung. Oder Sie können meinen Blog auf Key Bindings lesen, die einige einfache Codebeispiele enthalten.
>Diese zweite Bindung wird nicht auf dem Menüelement selbst angezeigt.
Von: Ссылка
Die Masken werden auch verwendet, um anzugeben, welchen Ereignistypen ein AWTEventListener zuhören soll.
Sie können also die Maske für zwei Schlüssel kombinieren, aber nicht für die KeyEvents.
%Vor%Eine Umgehungslösung wäre, das KeyEvent in der Mitte abzufangen (nachdem Ihre Komponente es ausgelöst hat, aber bevor Ihre Zuhörer darauf reagieren) und zu überprüfen, ob es eine der beiden Kombinationen ist. Dann feuern Sie ein Ereignis ab, auf dem Sie programmatisch zustimmen, die gewünschte Aktion darzustellen.
Der zweite Aufruf überschreibt tatsächlich den Beschleuniger. Wenn die Methode mit set beginnt, gibt es nur eine. Wenn die Methode mit add beginnt, können Sie mehrere haben (zum Beispiel für eine Anzahl von Listenern).
Wenn Sie möchten, dass mehrere Tastenanschläge dasselbe tun, sollten Sie dem obersten Frame (oder Panel, Dialogfeld, ...) einen keyListener hinzufügen, der die dem menuItem hinzugefügten Aktionslistener aufruft.