2012-06-08 17 views
1

我正在使用西班牙語OS在德語筆記本電腦上的英文應用程序中工作。Swing中的本地化加速器(JMenuItem熱鍵)

即使我顯式地在我的應用程序,我看到在菜單中hotkexs的beggining設置Locale.setDefault(Locale.ENGLISH)作爲

CTRL + Mayúsculas + C 

,而不是

CTRL + SHIFT + C 

那我傳遞給KeyStroke對象。

不僅這個單詞不像我指定的那樣被本地化爲英語,而且它將SHIFT鍵映射到MAYUS(CAPS LOCK in english),所以我猜這不僅是一個語言問題,而且是鍵映射以及。

那麼我怎樣才能強加所有的GUI組件英語?

謝謝!

回答

3

您必須確保在任何工具箱代碼執行之前設置區域設置。以下代碼顯示效果:如果將Locale.setDefault(Locale.GERMAN);移動到任何其他行,它將再次顯示默認的加速器名稱。

而不是設置你的代碼中的語言環境中,你還可以在以下參數附加到VM:

-Duser.language=DE 

locale menu

public class MenuLocale { 

    public static void main(String[] args) { 
     Locale.setDefault(Locale.GERMAN); 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       JFrame f = new JFrame(); 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

       JMenuBar menubar = new JMenuBar(); 
       JMenu menu = new JMenu("Menu"); 
       JMenuItem menuitem = new JMenuItem("Menuitem");  
       menuitem.setAccelerator(KeyStroke.getKeyStroke('X', KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK)); 

       f.setJMenuBar(menubar); 
       menubar.add(menu); 
       menu.add(menuitem); 

       f.pack(); 
       f.setVisible(true); 
      } 
     }); 
    } 
} 
+1

+1 [右靠背可以在這裏(HTTP:/ /stackoverflow.com/a/10666768/714968) – mKorbel

+0

我把它放在我的代碼的第一行後,主方法聲明,它不起作用:'( – Whimusical

+0

請注意,你的主要方法不是一個JFrame的一部分。這是我遇到的陷阱... –