2011-05-15 5 views
2

안녕 얘들 아, 마우스 클릭으로 JFrame을 닫고 싶습니다. 나는 그것을 할 수있는 코드를 가지고 있지만,마우스 클릭시 JFrame 닫기

public void closeFrame() 
{ 

    jPanel.removeAll(); 
    String x = ""; 
    JLabel exit = new JLabel ("Click Anywhere To Close!", JLabel.CENTER); 
    exit.setPreferredSize (new Dimension (700, 100)); 
    jPanel.add (exit); 
    jPanel.revalidate(); 

    MouseListener ml = new MouseAdapter() 
    { 
     public void mouseClicked (MouseEvent event) 
     { 
      //Put JFrame close code here 
      dispose(); 
      System.exit (0); 
     } 
    } 
    ; 
    addMouseListener (ml); 
    validate(); //This hasn't made a difference :(

} 

... 작동하지 않는 클래스는 JFrame의를 확장하고의 MouseListener를 구현 나던. 그럼에도 불구하고 코드는 작동하지 않습니다.

합니다 ... JFrame의 초기화가 (이 도움이되기를 바랍니다) 모양을 내가 할 수없는 경우, 폐쇄 다른 방법이 코드가 작동 &을 만들 수있는 방법

public void createFrame() 
{ 
    new JFrame (":) :)"); 
    setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
    setVisible (true); 
    //Some Initialization for jPanel variable 
    getContentPane().add(jPanel); 
    pack(); 
} 

입니다 마우스 클릭시?

--- 편집 ---

덕분에 뱀장어의 호버 전체로 이동

의 MouseListener 내가 JFrame의 contentPane에 궁금하게 생각해야하는 JPanel의

//WORKING CODE 
public void closeFrame() 
{ 

    jPanel.removeAll(); 
    String x = ""; 
    JLabel exit = new JLabel ("Click Anywhere To Close!", JLabel.CENTER); 
    exit.setPreferredSize (new Dimension (700, 100)); 
    jPanel.add (exit); 
    //jPanel.revalidate(); 

    MouseListener ml = new MouseAdapter() 
    { 
     public void mouseClicked (MouseEvent event) 
     { 
      //Put JFrame close code here 
      dispose(); 
      System.exit (0); 
     } 
    } 
    ; 
    jPanel.addMouseListener (ml); 
    jPanel.revalidate(); 

} 
+0

"마우스 클릭시 JFrame을 닫고 싶습니다." 프레임이 다른 윈도우에 의해 부분적으로 가려져 있고 일부가 보이고 그것을 클릭하여 앞으로 가져 오면 대신 닫아야합니다. * 왜? * –

답변

2

에 추가해야하는 MouseListener를 추가하여 표시된 JFrame과 다릅니다. 특히 createFrame 메서드에서 새 JFrame을 만드는 것을 볼 수 있습니다. MouseListener는 시각화 된 구성 요소에 추가 된 경우에만 작동한다는 것을 알고 있습니까?

제안 :

  • 이 클래스를 사용하면 시각화 JFrame의의 contentPane에 추가하고있는 JPanel에로의 MouseListener를 추가 JFrame의
  • 확장 할 필요가 없습니다.
  • 클래스에 JFrame 변수를 지정하고 createFrame 메소드에서 작성중인 JFrame을 참조하게하십시오. 그런 다음이 JFrame을 적절하게 처분 할 수 있습니다.
  • 시각화 된 JFrame에서 setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE)을 호출하는 것을 잊지 마십시오.
+0

Omg HFOE, 당신이 해냈습니다. 내가 할 필요가있는 것은 프레임 대신에 mouseListener를 추가하는 것입니다. (STUPID ME !!) - Thanks again! –

+0

@ 지미 : 기꺼이 도와 줬어! –

1

다음은 내가 한 일입니다.

btnClose = new JButton("Close"); 
btnClose.addMouseListener(new MouseAdapter() { 
@Override 
public void mouseClicked(MouseEvent e) { 
     dispose(); 
    } 
}); 
btnClose.setBounds(253, 190, 75, 25); 
contentPane.add(btnClose); 
} 
관련 문제