2012-06-08 4 views
1

스페인어 OS를 사용하는 독일어 노트북의 영어 앱으로 작업하고 있습니다.Swing의 현지화 된 단축키 (JMenuItem 단축키)

나는 명시 적으로

CTRL + Mayúsculas + C 

대신

CTRL + SHIFT + C 

로 내 애플 리케이션, 나는 메뉴에서 hotkexs을보고하고의 beggining에 Locale.setDefault (Locale.ENGLISH) 설정하더라도 그 KeyStroke 객체에 전달되었습니다.

내가 지정한대로 해당 단어가 영어로만 번역 될뿐만 아니라 SHIFT 키가 MAYUS (영어의 Caps Lock)로 매핑되므로 언어 ​​문제가 아니라 keymap 게다가.

그래서 모든 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

일 [바로 나머지는 여기에있을 수 (HTTP :////10666768/714968) – mKorbel

+0

main 메소드 선언 후에 코드의 첫 번째 줄에 넣었지만 작동하지 않습니다. '( – Whimusical

+0

main 메소드가 JFrame의 일부가 아니라는 점을 알아 두십시오. 내가 만난 함정 ... –