NetBeans VK_PLUS und VK_MINUS gehen nicht

apple-itob

Mitglied
Hallo,

ich habe versucht, meinen Menüeinträgen Shortcuts hinzuzufügen, das geht auch bei den meisten, nur wenn ich VK_PLUS und VK_MINUS (mit oder ohne Modifier) zuordne reagiert das Programm nicht.

Ich arbeite am Mac unter Mountain Lion mit deutschem Tastaturlayout. Ich vermute, dass da irgendwo was falsch gemappt wird, denn wenn ich auf die ß-Taste drücke, reagiert das Programm mit der Funktion, die VK_MINUS zugeordnet ist.

Ich hänge mal ein Minibeispielprojekt zum testen an …

Gibt es eine möglichkeit, wie ich sicherstellen kann, dass auf allen System mit allen Layouts die Plus- respektive Minus-Taste auch als solche erkannt wird? Vorzugsweise ohne, dass ich nen KeyListener oder so implementieren muss, der aber vermutlich auch Blödsinn macht, weil auch im Listener würde ich ja mit VK_PLUS/VK_MINUS vergleichen oder?


Danke euch!
Tobi
 

Anhänge

  • ShortCuts.zip
    16,2 KB · Aufrufe: 5

mla.rue

Bekanntes Mitglied
Shortcuts von "aktivierbaren" Java Komponenten werden über mnemonic definiert... kA wie es beim Mac ist, aber bei Linux/Windows drückt man Alt+Taste um die entsprechende Komponente zu aktivieren.

Java:
jMenuItemDatei.setMnemonic('d');

da du mit NetBeans arbeitest, Rechtsklick auf das MenuItem.... Properties.... und 7te Zeile.
 

apple-itob

Mitglied
Guten Morgen,

ne Mnemonics will ich nicht sondern einen Accelerator. Das was Netbeans beim erstellen einer Menüleiste anbietet:

92XXv.png


Dort wo im Moment ^Pfeil-rauf steht würde ich gerne ^+ benutzen. Ich kann das in Netbeans auch einstellen, wenn ich das Aufklappmenü benutze,
7oBpB.png

aber wenn ich in dem Shortcut-Fenster die gewünschte Tastentkombination drücke, versteht er es nicht bzw. hält das Plus für eine schließende Klammer (VK_CLOSINGBRACKET). Ich nehme an, das Java und/oder die IDE nicht mit dem deutschen Tastaturlayout klarkommt. Daher meine frage, wie ich VK_PLUS und VK_MINUS zum laufen bringe …
 

mla.rue

Bekanntes Mitglied
das englische Tastaturlayout (US) hat die schließenden Klammern ]} auf der Taste, wo bei uns + liegt

das PLUS wäre da dann auf dem ´` (also zwischen ? und Backspace), wundert mich, dass dir das noch nie aufgefallen sein soll
 

apple-itob

Mitglied
Natürlich weiß ich, dass das Tastaurlayout bei den Amis ein anderes ist und natürlich kann ich auch rausfinden wo bei denen das Plus ist … Ich will aber das das Programm auf die Taste reagiert, auf der + ist, egal, welches Layout der Benutzer verwendet, ich dachte das sei gerade der Witz bei den VK_-Dingern …
 

mla.rue

Bekanntes Mitglied
Ich verstehe nicht so wirklich dein Problem... du sagst du sitz an nem Mac mit deutschem TastaLayout... aber wenn du ß drückst, reagierts wie ein -.... und aufm englischen (USA) Layout ist dort genau.. - ergo stimmt dein Tastaturlayout offensichtlich nicht.

Java reagiert auf den Key (VK) und welche Taste genau das auf der Tastatur ist, hängt vom Tastaturlayout ab. Während aber das Mac spezifische Tastaturlayout (DE) leichte Abweichungen hat, so sind + und - an den gewohnten Stellen.

Definiere deinen Accelerator als VK_MINUS und VK_PLUS und die Anwendung wird so reagieren wie du wünschst, wenn nicht, schau dir das Tastaturlayout an (btw könnte auch an der Spracheinstellung liegen, sprich DE Tasta mit EN locale hast auch ein Problem).
 

apple-itob

Mitglied
Also ich kann schon meinen Computer bedienen! Das Tastaturlayout ist richtig eingestellt und etspricht der angeschlossenen Tastatur, wenn ich auf die Taste mit dem Eszett drücke, erscheint auf dem Bildschrim ein ß und Wenn ich auf die drücke, auf der das Plus ist, erscheint auf dem Bildschirm ein + – eben so, wei es sein soll nur Java reagiert falsch:
In Textfelder kann ich ganz normal Tippen und auch die Plustaste erzeugt ein +-Zeichen. Nur bei den Accelaratorn stimmt offensichtlich irgendetwas nicht, da interpretiert Java die Eingaben nach dem US-Layout und nicht nach dem im Betriebssystem eingestellten. Ich kann mir nur schwer vorstellen, dass das Absicht ist und wüsste nun gerne wie man das beheben kann.
 

mla.rue

Bekanntes Mitglied
also bei mir funktionierts... Linux (3 Kisten) , Mac (2 Kisten +1 Notebook) , Windows 1 Kiste... kann also nur an deiner Kiste liegen
 

apple-itob

Mitglied
Arg … du hast recht in meinem BootCamp-Windows via Parallels gestartet funktioniert es auch. Nur auf meinem Mac eben nicht, das ist doch mist und ich verstehe einfach nicht, warum …?

Also ich bin sicher, dass mein Layout richtig eingestellt ist, da 1. oben in der Menüleiste die deutsche Flagge weht und 2. bei der Texteingabe alle Zeichen so erscheinen wie erwartet. Aber irgendwie ordnet die JVM (?) das VK_PLUS falsch zu. Sogar wenn ich einen Listener
Java:
frame.addKeyListener(new KeyAdapter() {
         @Override
         public void keyPressed(KeyEvent e) {
            System.out.println(e.getKeyCode());
            System.out.println(e.getKeyChar());
            if (e.getKeyChar() == '+') {
               PlusActionPerformed(null);
            } else {
               if (e.getKeyChar() == '-') {
                  MinusActionPerformed(null);
               }
            }
         }
      });
hinzufüge geht es. Im Terminal erscheint dann bei jedem Druck auf die Plustaste eine 93 und das +-Zeichen. Der char-Vergleich führt ebenfalls zum richtigen Ergebnis. Nur die Acceleratoren machen etwas falsch. Übrigens wird die Plus-Tasten-Aktion auch nicht ausgeführt, wenn ich die Akzenttaste drücke. Da ist doch irgendwas ganz arg faul …*nur was?

Mit VK_ADD, also der Plustaste auf dem Ziffernblock, geht es übrigens auch …

-------

Hm. Ich habe jetzt eine Lösung. Da es auch eine Methode [c]getKeyCode(char c)[/c] gibt –*wie ich grad rausgefunden habe – verwende ich nun
Java:
Plus.setAccelerator(javax.swing.KeyStroke.getKeyStroke('+'));
Minus.setAccelerator(javax.swing.KeyStroke.getKeyStroke('-'));
Damit geht es unter Mac und dem virtualisierten Windows. Sogar in beiden Fällen sowohl mit der Taste auf dem Ziffernblock als auch der normalen. Die Unterscheidung zwischen VK_ADD und VK_PLUS entfällt damit netter weise auch. Damit kann ich nun gut leben, auch wenn ich nach wie vor gerne wüsste, woran es lag …


Dir vielen Dank und entschuldige meine etwas ruppige Art. Normalerweise bin ich netter und geduldig, aber ich stecke grad in der Endphase meiner Bachelorarbeit und hänge hinterm Zeitplan, da nerven mich solche Kleinigkeiten besonders, wenn es offensichtlich keinen vernünftigen Grund gibt …


Gute Nacht!
Tobi
 

Neue Themen


Oben