2010-06-24 3 views
1

안녕하세요. 자바 애플리케이션에 하나의 JDialog 상자 만 있습니다. 포커스를 잃어 버렸을 때 보이지 않게하고 싶습니다. 다른 방법을 시도했지만 창 포커스 이벤트를 트리거 할 수 없었습니다. 여기 내 코드는 다음과 같습니다.창이 포커스를 잃었을 때 JDialog 창을 숨기기

public void windowGainedFocus(WindowEvent e) { 
    System.out.println("gained focus"); 
    } 

    public void windowLostFocus(WindowEvent e) { 
    System.out.println("lost focus"); 
    } 

답변

2

포커스 이벤트에 대한 응답은 실제로 까다로울 수 있습니다. 내 경험은 누군가가 초점을 가지고 비표준 일을 시도 할 때마다 거의 그 경험이었습니다. 결국 그들은 그것을 후회하게되었습니다. X-Windows 기반의 많은 디스플레이는 focus-follows-mouse를 사용하기 때문에 기대하지 않을 때 포커스가 이동되어 초기에 발생할 수 있습니다. 귀하의 대화를 해고합니다.

그렇다면 Sun의 공식 자습서는 http://java.sun.com/docs/books/tutorial/uiswing/misc/focus.html입니다. 기억이 맞으면 KeyboardFocusManager에 PropertyChangeListener를 첨부하면 포커스 변경을 위해 트리거됩니다. http://java.sun.com/javase/6/docs/api/java/awt/KeyboardFocusManager.html#addPropertyChangeListener%28java.beans.PropertyChangeListener%29

+0

내 문제에 대해 자세히 알려 드리겠습니다. 저는 리눅스 시스템을 사용하고 있습니다. JEditPane이있는 JDialog 상자가 있습니다. 이 창은 고정 된 크기입니다. 포커스가 사라지면이 창을 트레이로 최소화하려고합니다. – Joe

+0

아래 제안 된 WindowListeners가 작동하는 것 같습니다. 내 직감으로 인해 많은 사용자에게 약간 짜증이납니다. 고정 크기의 JWindow에 넣은 다음 사용자가 원하지 않을 때 사용자가 최소화하도록하는 방법을 생각해 봤습니까? – Curtis

1

WindowListener를 사용하고 windowDeactivated 이벤트를 처리합니다.

관련 문제