2013-08-07 6 views
1

키 수신기가있는 JComboBox입니다. 내가 <enter>에 충돌 할 때JComboBox에 포커스를 잃게하려면 어떻게해야합니까?

, 내가 어떤 행동, 을 해고하고 나는 JComboBox에 초점을 잃을 필요가!

은 내가 할 수있는, 거기에 초점을 맞추려면 JComboBoxObject.grabFocus();

그러나 다음 요소 (초점이 콤보 상자에서 불과 멀리 간다 WHERE 난 상관 없어) 작동하지 않습니다에 포커스를 얻을 수 transferFocus()을하고.

다른 콤보 상자에서 수행중인 grabFocus()이 작동하지만 나에게 꽤 짜증나는 해킹처럼 보입니다. 더 나은 해결책이 있습니까?

+1

관련 없음 : sigh ... keylisteners를 사용하지 마십시오 .. related : transferFocus (현재 포커스가있는 컴포지션에서 사용됨)는 달성해야하는 _ 정확한 _ 무엇을 보여 주는지 SSCCE를 잘 보여주지 않으면 작동해야합니다. BTW, JComboBox 사용법에 대한 튜토리얼을 읽었습니까? 저수준 청취자 및 복합 구성 요소 (잠재적으로 - 실제로 알 수없는)에 대해 다음과 같이 말합니다. – kleopatra

답변

3

내가 먼저

.requestFocusInWindow()를

사용 후

.getNextFocusableComponent()를 사용하고 제안 할 수 있습니다 이런 식으로 구현 수단 5,

,

JComboBox.getNextFocusableComponent() requestFocusInWindow를().;

한 가지 중요한 점은 .getNextFocusableComponent()가 쓸모가 될 것을이지만, 당신이 그것을 사용할 수있는 정말 더 잘 작동 할 수 있지만 다른 해결책을 가지고 있다면,이를 사용하지 않으려는 것입니다.

+0

아니요 - 더 이상 사용되지 않는 코드를 사용하지 마십시오. – kleopatra

3

업데이트 됨 :이 두 가지 콤보 인 example에서 시작하여 actionPerformed() 구현에 다음 줄 중 하나를 추가하면 원하는대로 처리 할 수 ​​있습니다.

combo1.transferFocus(); 
combo2.requestFocusInWindow(); 
+0

다른 구성 요소를 하드 코딩하지 않는 것이 좋습니다 :-) – kleopatra

+0

@kleopatra가 옳습니다. : 나는 문자 그대로 조금이라도 신경 쓰지 않았다. 'getNextFocusableComponent()'API가 제안한 것처럼'Container'의'FocusTraversalPolicy'를 물어보아야합니다. – trashgod

+2

사실, traversalPolicy가 너무 낮은 수준인지 묻습니다 (적용 할 수있는 항목을 찾을 때까지 계속 걸어 가야합니다. isTraversalPolicyProvider 속성과 내가 기억하지 못하는 다른 부분도 확인하십시오). - component.transferFocus가 제대로 작동해야합니다. – kleopatra

관련 문제