2011-05-15 63 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,它DOESNT實現MouseListener。儘管如此,代碼不起作用。

這是JFrame的初始化看起來(希望它能幫助)...

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

我怎樣才能使此代碼工作&如果我不能,有沒有關閉的替代方法在鼠標點擊?

---編輯---

由於去氣墊船全鰻魚

的MouseListener的必須添加到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在點擊鼠標時關閉」。你的意思是,如果框架被其他窗口部分遮擋,並且我看到它的一部分並點擊它將它放在前面,你希望它應該關閉嗎? *爲什麼?* – 2011-05-16 00:06:18

回答

2

我如果JFrame的contentPane的懷疑,即您已經將MouseListener添加爲與正在顯示的JFrame不相同,尤其是因爲我看到您在createFrame方法中創建了新的JFrame。你明白MouseListener只有在添加到可視化組件後才能工作,對嗎?

建議:

  • 沒有你的類擴展JFrame的
  • 您的MouseListener添加到您要添加到可視化的JFrame的contentPane的JPanel的。
  • 爲您的課程添加一個JFrame變量,並讓它引用您在createFrame方法中創建的JFrame。然後,您可以按照您認爲合適的方式處理此JFrame。
  • 不要忘記在可視化的JFrame上調用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。
+0

Omg HFOE,你做到了。我所需要做的就是將mouseListener添加到Panel而不是框架(STUPID ME !!) - 再次感謝! – 2011-05-16 00:08:37

+0

@Jimmy:很高興幫助! – 2011-05-16 00:27:50

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); 
}