2013-05-04 32 views
10
void terminate() {} 
protected JFrame frame = new JFrame(); 

Làm cách nào để có được frame để chạy chức năng chấm dứt khi tôi nhấn nút đóng?Chức năng chạy trên JFrame gần

Chỉnh sửa: Tôi đã cố gắng để chạy điều này, nhưng vì lý do nào đó nó không in thử nghiệm (tuy nhiên, chương trình đóng). Có ai có một ý tưởng những gì có thể là vấn đề?

frame.addWindowListener(new WindowAdapter() { 
    public void WindowClosing(WindowEvent e) { 
     System.out.println("test"); 
     frame.dispose(); 
    } 
}); 

Trả lời

13

Bạn có thể sử dụng addWindowListener:

frame.addWindowListener(new WindowAdapter() 
{ 
    public void windowClosing(WindowEvent e) 
    { 
     ... //call terminate 
     ... 
    } 
}); 

Xem void windowClosing(WindowEvent e)Class WindowAdapter quá.

+0

Tôi có phải tạo một lớp mới mở rộng JFrame và triển khai WindowAdapter không? (hoặc là ok để giữ khung như một JFrame?) Nó không thực sự làm việc được nêu ra, và tôi nhận được cảnh báo "Phương pháp WindowClosed (WindowEvent) từ loại WindowAdapter mới() {} không bao giờ được sử dụng cục bộ" trên chức năng WindowClosing – Mattias

+0

Đăng mã của bạn sau những thay đổi bạn đã thực hiện. – Maroun

+0

Ok, tôi đã thêm mã làm bản chỉnh sửa. – Mattias

1

Nếu bạn muốn chấm dứt chương trình của mình sau khi JFrame bị đóng, bạn phải đặt hoạt động đóng mặc định trên JFrame của mình.

Trong constructor của bạn của JFrame ghi của bạn:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Nếu bạn chỉ muốn gọi một phương thức khi cửa sổ được đóng lại và không chấm dứt toàn bộ chương trình, hơn đi với câu trả lời của Maroun.

+0

Tôi muốn thực hiện cả hai (chạy một hàm, sau đó chấm dứt). Dưới đây là mã của tôi hiện tại: \t \t frame.addWindowListener (WindowAdapter mới() { \t \t \t public void WindowClosing (WindowEvent e) { \t \t \t \t System.out.println ("test"); \t \t \t \t frame.dispose(); \t \t \t} \t \t}); Vấn đề là nó không in "thử nghiệm". Bạn có bất kỳ ý tưởng những gì có thể là vấn đề? – Mattias

+1

Phương pháp là "windowClosing" không phải "WindowClosing". Bạn cần ghi đè nó, vì vậy nó phải là tên chính xác. –

13

Không chỉ bạn phải thêm trình nghe cửa sổ, bạn phải đặt hoạt động đóng mặc định để không làm gì khi đóng. Điều này cho phép mã của bạn thực thi.

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
    frame.addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowClosing(WindowEvent event) { 
      exitProcedure(); 
     } 
    }); 

Cuối cùng, bạn phải gọi Thoát hệ thống để thực sự dừng chương trình của bạn chạy.

public void exitProcedure() { 
    frame.dispose(); 
    System.exit(0); 
} 
+1

+1 cho câu trả lời, nhưng đặc biệt là '@ Ghi đè'. Lời khuyên rất tốt. Không (xem xét lại) *** lời khuyên tuyệt vời ***. :) –

+1

+1. Thật. Tôi với @AndrewThompson :) – Maroun

0

Phương thức Frame.dispose() không chấm dứt chương trình. Để chấm dứt chương trình bạn cần gọi phương thức System.exit (0)

Các vấn đề liên quan