2016-08-05 49 views
1

我在Windows 10(英語和俄語)上有兩種語言。我運行下面的代碼片段:SWT錯誤地檢測到組合鍵

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(); 
} 

當語言設置爲英文,我按Right Alt + T,程序正確打印[Alt, t]

但是,當我將語言切換爲俄語並按Right Alt+T時,程序將打印[Ctrl, Alt, t]。這是不正確的,因爲我沒有按Ctrl。

這很煩人,因爲我們的Eclipse RCP密鑰綁定(如Alt+F7Alt+Shift+F5)無法正常工作。

SWT錯誤地檢測到的任何想法Ctrl

我使用最新的Eclipse 4.6(SWT 3.105.0)中的SWT。

+0

你檢查過https://www.eclipse.org/swt/bugs.php嗎? – zapl

+1

你確定你沒有使用'AltGr'按鈕(右'Alt')而不是標準的'Alt'按鈕(左'Alt')嗎?看起來'AltGr'的解釋與鍵盤佈局緊密相關。 –

+0

@LorisSecuro是的,我正在使用右Alt – ZhekaKozlov

回答

1

由於歷史的原因,在非美國鍵盤佈局使用的AltGr(右Alt)鍵操作系統將自動轉換爲Ctrl + Altsee Wikipedia about this) 。

所以這與SWT沒有特別的關係。

爲避免此問題,用戶應該只使用標準Alt(左Alt)鍵。

+0

我不能告訴客戶只是不要使用正確的Alt。有沒有解決方法? – ZhekaKozlov

-1

您是否嘗試過禁用快捷鍵來更改語言在Windows 10