2010-12-14 2 views
7

JMenu를 사용하여 만든 메뉴가 있습니다. 이 메뉴에 바로 가기 키 Alt-F를 지정하고 싶습니다. 그 일을하기 위해 setMnemonic ('F')을 사용했지만 니모닉을 인식하지 못합니다.자바 스윙 JMenu 니모닉

이 문제를 해결하거나 디버깅하는 가장 좋은 방법은 무엇입니까? 나는 중단 점을 설정하는 것이 그다지 도움이되지 않는다는 것을 안다.

감사합니다.

코드 조각 :

//higher up in variable declaration 
/** Menus on the menu bar */ 
private JMenu uiFindMnu   = new JMenu("Find"); 
... 
//inside the constructor 
// set mnemonic for the Find menu 
uiFindMnu.setMnemonic('F'); 
+0

나는 우리가 몇 가지 코드를 볼 필요 해요 생각을 기록했다. –

+0

왜이 질문에 대해 누구도 상상하지 않겠습니까? 이것은 기본적인 것들입니다. 모든 포스터는 JMenu API를 읽고 "How to Use Menus"에서 Swing 튜토리얼에 대한 링크를 찾으십시오. 게으르다는 이유로 사람들에게 보상을주는 이유는 무엇입니까? SSCCE가 없으면 우리는 포스터가 잘못했을 수도있는 것을 추측하는 데 시간을 낭비하고 있습니다. 따라서 질문은 완전한 질문조차되지 않습니다. – camickr

+1

JMenu 니모닉이 버튼 니모닉과 다르게 동작하는 것을 발견했습니다. 연상 기호를 사용하여 버튼을 클릭하려면 Alt 키를 누른 다음 단축키를 누릅니다. JMenu를 사용하려면 다음을 수행해야합니다. Alt 단추를 누르고 Swing이 첫 번째 메뉴를 강조 표시 할 때까지 기다렸다가 화살표 키를 사용하여 다른 메뉴를 선택하거나 해당 바로 가기 알파벳을 눌러 메뉴를 선택합니다. – zfranciscus

답변

1

사용 setMnemonic(KeyEvent.VK_F);

난 당신이 JMenus에 대해 숙지하는 것이 좋습니다 :

메뉴 지원 : 여기

Howto use Menus이 문서의 추출물 두 종류의 키보드 대안 : 니모닉 및 가속기. 연상 기호는 키보드를 사용하여 메뉴 계층을 탐색하는 방법을 제공하여 프로그램의 액세스 가능성을 높입니다. 액셀러레이터는 키보드 계층을 탐색하는 을 우회하는 바로 가기 키를 제공합니다. 연상 기호는 모든 사용자를위한 것입니다. 액셀러레이터는 고급 사용자 용입니다.

니모닉은 이미 표시된 메뉴 항목을 선택하게하는 키입니다. 예를 들어 MenuDemo에서 첫 번째 메뉴에는 니모닉 A가 있고 두 번째 메뉴 항목에는 니모닉 B가 있습니다. 즉, MenuDemo를 Java 룩앤필로 실행하면 Alt와 A 키 을 누르면 첫 번째 메뉴가 나타납니다. 첫 번째 메뉴가 표시되는 동안 B 키 (Alt 사용 또는 사용 안 함)를 누르면 두 번째 메뉴 항목이 선택됩니다. 메뉴 항목은 일반적으로 메뉴 항목의 텍스트에 니모닉 문자가 처음 나타나는 것을 에 밑줄로 표시하여 니모닉을 표시합니다. 그 뒤에는 스냅 샷이 표시됩니다. B는이 메뉴에 대한 니모닉 문자입니다. 항목

메뉴 항목을 구성 할 때 니모닉을 지정하거나 을 setMnemonic 메소드로 지정할 수 있습니다. 여기 니모닉 가속기 설정의 예 : 보시

//Setting the mnemonic when constructing a menu item: 
menuItem = new JMenuItem("A text-only menu item", 
         KeyEvent.VK_T); 

//Setting the mnemonic after creation time: 
menuItem.setMnemonic(KeyEvent.VK_T); 

는, 사용자가 키를 누르한다 대응하는 KeyEvent 상수 지정 니모닉 세트. (JFrame의 확장) 클래스 생성자의 내부

+0

시도해 보니 모두에게 결과를 알려줄 게. – zfranciscus

+0

@zfranciscus JMenus에 대해 알아야 할 모든 것을 설명하는 링크가있는 내 게시물을 편집했습니다. – LaGrandMere

5

: 나를 위해 잘 작동

JMenu helpmenu = new JMenu("File"); 
helpmenu.setMnemonic('F'); 
JMenuBar menubar = new JMenuBar(); 
menubar.add(helpmenu); 
setJMenuBar(menubar); 

. 더 나은 답변을 제공하려면 코드에 대한 자세한 정보를 제공해야합니다. SWING이나 응용 프로그램 GUI의 문제 해결에 관해서는 가능한 가장 간단한 시나리오를 만드는 것이 좋습니다. 나는 테스트를 위해 내부에 간단한 코드를 던져 넣을 수있는 베어 뼈대 JFrame 템플릿을 유지한다. 가장 단순한 시나리오에서 작동하는 것을 알게되면 프로젝트로 돌아가서 GUI의 다른 부분이이 기능과 충돌하는 것을 발견 할 수 있습니다.

호기심에서 벗어나 클래스 변수를 숨기고있는 'uiFindMnu'라는 로컬 변수가 생성자에서 발생하지 않습니다. setMnemonic()을 호출하는 변수가 MenuBar에 추가 된 변수인지 (실제로 표시되는지) 확인해야합니다.

+0

감사합니다. 정말 도움이되었습니다. – zfranciscus

+0

좋은 답변이지만 그렇지 않습니다. 좋은 생각] (http://stackoverflow.com/q/1143923/439793) "확장 (보내는) JFrame" –

2

비슷한 문제가 발생하여 설정으로 인해 발생했습니다. 구성 요소를 초기화 한 후 모양과 느낌이 인 경우 문제가 발생했습니다. 진술을 뒤집 으면 효과가있었습니다.

는 블로그 포스트 here