2011-01-11 5 views
4

getFocusOwner() 작업에 도움이 필요합니다. 나는 자바로 만든 스도쿠 게임을 가지고 있으며 화살표 키 탐색 기능을 프로그램에 추가하려고합니다. 나는 약간의 연구를했고 포커스 시스템을 사용하는 것이 최선의 방법이라는 것을 발견했다. (그렇지 않다면, 더 나은 방법을 제공하고 그것을 연구 할 수있다.)맞춤 클래스가있는 getFocusOwner

좋아요, 테스트 목적으로, 나는 SetTield (JTextField를 확장하는 커스텀 클래스)에 포커스를 맞추려고합니다. 커스텀 클래스는 커스텀 클래스가 아닙니다. 집중력이 집중되었습니다. 그리드 가운데 SetField에 requestFocusInWindow()를 호출하고 해당 구성 요소에 포커스가 설정되었습니다. 포커스가있는 구성 요소를 검색 할 때 문제가 발생합니다.

이 내가 getFocusOwner() 메서드를 테스트하지 않으려면 뭘하는지입니다 : 아무리에서 이것을 시도 어떤 구성 요소

sGrid[40].requestFocusInWindow(); 

    try{ 
     System.out.println(this.getFocusOwner().getClass().getSimpleName()); 
    } catch(NullPointerException e){ 
     e.printStackTrace(); 
    } 

을, 난 항상 널 포인터 예외를 얻을. 나는 JButtons, JLabels, 심지어 내 프로그램의 JPanels로 시도했다. 포커스는 구성 요소로 설정됩니다. 캐럿이 의도 된 SetField에서 깜박 거리는 것을 볼 수 있습니다. 내가 뭘 잘못하고 있니? 모든 도움을 미리 감사드립니다.

답변

1

방금 ​​문제가 발견되었습니다. 이 문제가있는 사람은 (Window) .getMostRecentFocusOwner()를 사용해보십시오. 이것은 나를 위해 일했다.

1
  1. 숫자 만 허용하는 사용자 지정 구성 요소 대신 JFormattedTextField를 사용하십시오.
  2. 포커스가있는 구성 요소를 결정해야하는지, KeyListener, MouseListener를 추가하지 않는 이유는 무엇입니까? 나는 초점을 가지고 무엇을하고 있는지 정확히 모르지만 이상하게 보입니다.
+0

내가하고있는 일은 반환하는 구성 요소의 간단한 이름을 출력하여 getFocusOwner 메서드를 테스트하는 것뿐입니다. 어떤 구성 요소에 포커스가 있는지 알아야하므로 화살표 키를 누른 후에 포커스가 어디로 갈지 파악할 수 있습니다. JFormattedTextField를 살펴 보겠습니다. 어쨌든 내 현재의 솔루션이 너무 잘 작동하지 않습니다. – SkylineAddict

1

화살표 키 탐색을 프로그램에 추가하고 싶습니다.

Key Bindings을 사용해야합니다. 기본 "ChangeFocusAction"을 만듭니다. KeyStroke에 매핑 할 수있는이 클래스의 인스턴스가 4 개 필요합니다.

81 개의 텍스트 필드가 배열되어 있다고 가정하면 동작을 포커스 변경 방법을 알려주는 정수 값을 사용하여 만들 수 있습니다. 예를 들어

바로 = -1
왼쪽 = 1
최대 = -13
다운 = 9

포커스가 텍스트 필드를 포함 할의 ActionEvent의 소스. 그런 다음 해당 텍스트 필드의 오프셋을 찾기 위해 arry를 검색합니다. 그런 다음 위의 int 값을 인덱스에 추가하고 해당 구성 요소에 포커스를 요청합니다.

+0

정확히 그 일을 생각하고 있었지만, 우선 포커스가있는 구성 요소를 가져와야합니까? – SkylineAddict

+0

그게 전부입니다. ActionEvent에는, 소스 컴퍼넌트가 있습니다. – camickr

관련 문제