2013-10-17 111 views
0

我已經寫了一個表單,並通過查看各種資源已經拿出了一個表單,當按下「X」時可以關閉自己。但是,我似乎是以一種相當黑客的方式做到這一點的。Java JFrame創建關閉按鈕

(代碼我張貼已經條紋的非相關的美容細節,但它是在-本質基於此教程彈出通知:http://harryjoy.me/2011/07/01/create-new-message-notification-pop-up-in-java/

public class Notification extends JFrame { 

    private JFrame uglyJFrameHack; 

    public Notification(String header, String message) { 
     super(); 
     uglyJFrameHack = this; 
     JButton closeBtn = new JButton("X"); 
     closeBtn.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       uglyJFrameHack.dispose(); //here's where this all seems screwy. 
      } 
     }); 
     this.add(closeBtn); 
     this.setVisible(true); 
    } 
} 

我可以」 t似乎在actionPerformed方法中使用「this」而沒有引用別的東西。我做了System.out.println(this.getClass());,它給了我class Notification$1。所以我試着將它轉換爲通知對象,但日食給我一個錯誤,說明Cannot cast from new ActionListener(){} to Notification

我有它的方式安裝工程,似乎沒有任何問題,但這也不是好的做法。有一個更好的方法嗎?謝謝大家。

回答

2

寫出更通用的代碼通過訪問事件的源對象:

Window window = SwingUtilities.windowForComponent((Component)e.getSource()); 
window.dispose(); 

現在,因爲你已經不是你可以使用這個ActionListener的任何GUI將類名稱硬編碼爲代碼的一部分。

+0

所以我再次遇到這個問題,我記得之前我曾問過這個問題,所以我回頭看了一遍。回顧這兩個答案,我現在意識到這應該是第一次實際選擇的答案。感謝這 –

+0

'我現在意識到這應該是第一次實際選定的答案。「 - 謝謝,遲到比從未好;) – camickr