2016-08-05 21 views
1

Ich habe zwei Sprachen auf meinem Windows 10 (Englisch und Russisch). Ich betreibe den folgenden Codeausschnitt:SWT erkennt Tastenkombinationen falsch

public static void main(String[] args) throws Exception { 
    Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.setSize(640, 480); 
    shell.setLocation(500, 250); 
    shell.setText("SWT"); 

    FillLayout layout = new FillLayout(); 
    shell.setLayout(layout); 

    shell.addKeyListener(new KeyAdapter() { 
     @Override 
     public void keyPressed(KeyEvent e) { 
      List<String> keys = new ArrayList<>(); 
      if ((e.stateMask & SWT.CTRL) != 0) { 
       keys.add("Ctrl"); 
      } 
      if ((e.stateMask & SWT.ALT) != 0) { 
       keys.add("Alt"); 
      } 
      if ((e.stateMask & SWT.SHIFT) != 0) { 
       keys.add("Shift"); 
      } 
      keys.add(Character.toString((char) e.keyCode)); 
      System.out.println(keys); 
     } 
    }); 

    shell.open(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 

    display.dispose(); 
} 

Wenn die Sprache auf Englisch eingestellt ist, und ich drücke Right Alt + T, das Programm korrekt druckt [Alt, t]. Wenn ich aber die Sprache auf Russisch umstelle und Right Alt+T drücke, druckt das Programm [Ctrl, Alt, t]. Das ist falsch, weil ich nicht die Strg-Taste gedrückt habe.

Das ist ärgerlich, weil unsere Eclipse RCP-Tastenbelegungen (wie Alt+F7 oder Alt+Shift+F5) nicht richtig funktionieren.

Irgendwelche Ideen, warum SWT Ctrl falsch erkennt?

Ich verwende SWT von der neuesten Eclipse 4.6 (SWT 3.105.0).

+0

haben Sie https://www.eclipse.org/swt/bugs.php überprüft? – zapl

+1

Sind Sie sicher, dass Sie nicht die Schaltfläche 'AltGr' (rechts' Alt') anstelle der Standardtaste 'Alt' (links' Alt') verwenden? Es scheint, dass die Interpretation von 'AltGr' eng mit dem Tastaturlayout verbunden ist. –

+0

@LorisSecuro Ja, ich benutze Right Alt – ZhekaKozlov

Antwort

1

Aus historischen Gründen in den Fenstern zu ändern, die AltGr (rechts Alt) Schlüssel in Nicht-US-Tastaturlayouts verwendet wird durch das Betriebssystem als Ctrl + Alt (see Wikipedia about this) automatisch konvertiert .

Das ist also nicht speziell mit SWT verbunden. Um dieses Problem zu vermeiden, sollten Benutzer einfach den Standardschlüssel Alt (links Alt) verwenden.

+0

Ich kann den Kunden nicht sagen, dass sie nicht das richtige Alt verwenden sollen. Gibt es einen Workaround dafür? – ZhekaKozlov

-1

Haben Sie versucht Verknüpfung deaktivieren Sprache 10.