2012-05-06 32 views
14

Tôi đã tự hỏi nếu có một cách, bằng cách nhấp vào "X", để cho chương trình thực hiện một số mã trước khi đóng JFrame. Phương thức setDefaultCloseOperation() chỉ mất một số nguyên.JFrame On Close Operation

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Trả lời

11

Bạn có thể quan tâm đến việc sử dụng WindowListener. WindowListener tutorial.

+0

Cảm ơn bạn rất nhiều. Đó là những gì im sau. –

+2

Hoặc bạn có thể sử dụng [WindowAdapter] (http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/event/WindowAdapter.html) để thuận tiện cho việc tạo các đối tượng nghe. –

15

@Jeffrey có câu trả lời hay nhưng bạn nên cân nhắc những gì bạn đang cố gắng làm. Nếu bạn thực sự muốn làm một cái gì đó sau khi đóng một khung, thì một WindowListener là con đường để đi. Tuy nhiên, nếu bạn đang tìm kiếm một nơi để làm một số công cụ dọn dẹp và dọn dẹp duyên dáng, thì bạn có thể muốn thay đổi một số shutdown hook. Sử dụng WindowListener, mã sẽ chỉ được kích hoạt, như bạn đã nói, bởi người dùng "nhấp vào X". Nhưng nếu người dùng bắt đầu ứng dụng ở mặt trước của thiết bị đầu cuối và giết nó bằng Ctrl + C thì sao? Điều gì xảy ra nếu người dùng giết quá trình từ dòng lệnh hoặc từ trình quản lý tác vụ?

+2

được chỉnh sửa để trỏ javadoc mới nhất :-) +1 btw – COD3BOY

+0

Ồ, cảm ơn bạn đã trả lời. Im sử dụng tính năng này để lưu một số dữ liệu khi đóng khung. –

+0

@Sanjay: Tôi đã chọn liên kết jdk6 vì 1) theo kinh nghiệm của tôi, nhiều người vẫn đang sử dụng 6 hơn 7 và 2) Runtime.addShutdownHook() không thay đổi một cú nhấp chuột giữa 6 và 7. –

14
this.addWindowListener(new WindowAdapter(){ 
       public void windowClosing(WindowEvent e){ 
        int i=JOptionPane.showConfirmDialog(null, "Seguro que quiere salir?"); 
        if(i==0) 
         System.exit(0);//cierra aplicacion 
       } 
      });