2012-03-16 6 views
4

이 사진을 보내 주시겠습니까? 일부 텍스트 필드, 체크 박스 및 단추가있는 JDialog가 있습니다. 프레임이 더 이상 집중되지 않을 때 사라지 길 원합니다. 그래서 포커스 리스너를 JDialog에 추가하고 포커스가 사라지면 dialog.setVisible(false);으로 호출합니다. 문제는 확인란, 텍스트 필드 또는 버튼을 클릭하면 프레임이 포커스를 잃고 사라지는 것입니다. 사용자가 지역 외부를 클릭 할 때까지 어떻게 집중시킬 수 있습니까?자바 프레임 유지에 초점을 맞 춥니 다

편집 : 내가 언급 한 "프레임"은 JDialog입니다. 나는 Frame이나 JFrame을 사용하지 않는다. 모든 구성 요소는 JDialog에 배치됩니다. 집중하지 않을 때 숨기고 싶지만 사용자가 영역 외부를 클릭 할 때까지 초점을 유지하십시오.

+0

더 도움이 필요한 빨리,이 [SSCCE을 게시 ] (http://sscce.org/). –

답변

5

addWindowFocusListener(...) 무엇 당신이 추가되어야한다,이 오류가 발생하는 것입니다,이 작은 샘플 프로그램을 참조 같다 :

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class DialogFocus 
{ 
    private JFrame frame; 
    private MyDialog myDialog; 

    public DialogFocus() 
    { 
    } 

    private void createAndDisplayGUI() 
    { 
     frame = new JFrame("JFRAME"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationByPlatform(true); 

     myDialog = new MyDialog(frame, "My Dialog", false); 

     JButton showButton = new JButton("SHOW DIALOG"); 
     showButton.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       if (!(myDialog.isShowing())) 
        myDialog.setVisible(true); 
      } 
     }); 

     frame.add(showButton, BorderLayout.PAGE_END); 

     frame.setSize(300, 300); 
     frame.setVisible(true); 
    } 

    public static void main(String\u005B\u005D args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new DialogFocus().createAndDisplayGUI(); 
      } 
     }); 
    } 
} 

class MyDialog extends JDialog 
{ 
    private WindowFocusListener windowFocusListener; 

    public MyDialog(JFrame frame, String title, boolean isModal) 
    { 
     setTitle(title); 
     setModal(isModal); 

     JPanel contentPane = new JPanel(); 

     JTextField tfield = new JTextField(10); 
     JComboBox cbox = new JComboBox(); 
     cbox.addItem("One"); 
     cbox.addItem("Two"); 
     cbox.addItem("Three"); 

     contentPane.add(tfield); 
     contentPane.add(cbox); 

     windowFocusListener = new WindowFocusListener() 
     { 
      public void windowGainedFocus(WindowEvent we) 
      { 
      } 

      public void windowLostFocus(WindowEvent we) 
      { 
       setVisible(false); 
      } 
     }; 

     addWindowFocusListener(windowFocusListener); 

     add(contentPane); 
     pack(); 
    } 
} 
+1

감사합니다. 이제 모든 것이 완벽하게 작동합니다! – Teo

+0

@ 테오. : Hehe, 당신의 환영과 계속 웃는 :-) –

2

대화 상자를 모달로 만들면 사용자가 프레임을 클릭 할 수 없습니다.

+0

모달로 만들면 포커스 리스너가 작동하지 않습니다. 내 편집을 참조하십시오. – Teo

2

FocusEvent 을 확인하십시오. public Component getOppositeComponent()입니다. 반대의 컴퍼넌트가 JDialog의 아이 컴퍼넌트 인 경우는, 다이얼로그를 숨기지 않습니다. 잘못된 리스너를 추가했다처럼

관련 문제