2014-12-20 3 views
0

자바에서 일부 버튼을 만들었습니다. 클릭하면 새로운 양식이 표시됩니다. 화살표 키를 사용하여 버튼을 클릭하고 스페이스 바를 클릭하여 클릭하십시오. 내 코드는 ide 또는 cmd.But에서 프로젝트를 실행할 때 작동합니다. 실행 가능한 jar 파일이 만들어 졌을 때 키보드 키를 누르면 버튼이 강조 표시되지 않습니다. 마우스 만 사용할 수 있습니다. 문제가 되니?키보드 키를 사용하여 버튼 강조 표시

답변

0

버튼의 니모닉 속성을 원하는 키로 설정하십시오. 내가 IDE 또는 cmd를에서 프로젝트를 실행할 때

myJButton.setMnemonic(...); 
+0

5 개의 버튼이 있으며 처음에는 첫 번째 버튼이 선택됩니다. 왼쪽 및 오른쪽 화살표 키는 버튼을 순환하는 데 사용됩니다. – srinivas

+0

스윙을 사용하고 있습니까? –

+0

예 스윙을 사용하고 있습니다 – srinivas

3

내 코드가 작동합니다.

어떻게 하시겠습니까? 나는 당신이 KeyListener를 사용하고 있다고 생각한다. KeyListener는 컴포넌트에 포커스가있을 때만 작동하며 버튼에 포커스가 없어 코드가 작동하지 않는다고 생각합니다. 일반적으로 KeyListener는 사용하지 말아야합니다. Swing은 Key Bindings과 함께 사용하도록 설계되었습니다.

이렇게 해결할 수있는 한 가지 방법은 앞으로 및 뒤로 탭으로 이동하고 단추가 들어있는 패널에 이러한 동작을 바인딩하는 사용자 지정 동작을 만드는 것입니다. Key Binding은 구성 요소에 포커스가없는 경우에도 작동 할 수 있습니다. 코드는 다음과 같습니다.

InputMap im = panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); 
String rightText = "RIGHT"; 
im.put(KeyStroke.getKeyStroke(rightText), rightText); 
panel.getActionMap().put(rightText, new AbstractAction() 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     KeyboardFocusManager.getCurrentKeyboardFocusManager().focusNextComponent(); 
    } 
}); 

또 다른 방법은 KeyboardFocusManager을 사용하는 것입니다. KeyboardFocusManager은 포커스 순회를 관리합니다. 디폴트 포커스 traversal 키는 Tab과 Shift-Tab입니다.

화살표 키를 사용하려면 이러한 키 스트로크를 포커스 관리자에 추가해야합니다. 따라서 변경하려는 각 구성 요소에 대해 다음을 수행하십시오.

Set<AWTKeyStroke> set = new HashSet<AWTKeyStroke>(button.getFocusTraversalKeys(
     KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS)); 
    set.add(KeyStroke.getKeyStroke("RIGHT")); 
    button.setFocusTraversalKeys(
     KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, set); 

첫 번째 방법은 패널의 모든 구성 요소에 적용됩니다. 개별 구성 요소에 대한 두 번째 접근 방식.

+0

맞아요. 나는 키 리스너를 사용하고 있습니다. 화살표 키를 누르면 다음 해당 버튼이 포커스를 얻고 강조 표시된 아이콘을 변경합니다. 처음에는 첫 번째 버튼이 포커스를 갖습니다. 문제는 실행 가능한 jar가 실행되어 첫 번째 버튼이 강조 표시되지 않는 경우입니다. – srinivas

+0

@srinivas'네, 핵심 수신기를 사용하고 있습니다. '- 나는 두 가지 더 나은 해결책을 제시했습니다. – camickr

+0

이제 작동합니다. 나는 net beans.j에서 항아리를 만들었습니다. 나는 코드를 변경하지 않았습니다. 나는 왜 그것이 일식에서 수출 될 때 일을 didnt하는지 이해하지 않는다. 나는이 2 개의 해결책을 또한 시도한다! – srinivas

관련 문제