Tôi muốn gọi một phương thức confirmExit()
khi nhấp vào nút đóng màu đỏ trên thanh tiêu đề của JFrame.
Làm thế nào tôi có thể nắm bắt sự kiện đó?
Tôi cũng muốn ngăn cửa sổ đóng nếu người dùng chọn không tiếp tục.
Câu trả lời:
import javax.swing.JOptionPane;
import javax.swing.JFrame;
/*Some piece of code*/
frame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
if (JOptionPane.showConfirmDialog(frame,
"Are you sure you want to close this window?", "Close Window?",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION){
System.exit(0);
}
}
});
Nếu bạn cũng muốn ngăn cửa sổ đóng trừ khi người dùng chọn 'Có', bạn có thể thêm:
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
Ghi đè phương pháp đóng cửa sổ.
public void windowClosing(WindowEvent e)
Nó được gọi khi một cửa sổ đang trong quá trình đóng. Thao tác đóng có thể bị ghi đè tại thời điểm này.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cũng hoạt động. Đầu tiên, hãy tạo một khung được gọi là JFrame, sau đó thêm mã này vào bên dưới.
confirmExit()
phương thức như OP mong muốn
confirmExit()
khi [dấu X] được nhấp." Và bình luận trước đó không liên quan đến OQ.
Điều này có thể hoạt động:
jdialog.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
System.out.println("jdialog window closed event received");
}
public void windowClosing(WindowEvent e) {
System.out.println("jdialog window closing event received");
}
});
Nguồn: https://alvinalexander.com/java/jdialog-close-closing-event
Đây là những gì tôi đặt làm tùy chọn menu, nơi tôi đã tạo một nút trên một JFrame
để hiển thị một tùy chọn khác JFrame
. Tôi chỉ muốn khung hình mới hiển thị, và không phá hủy khung hình đằng sau nó. Ban đầu tôi ẩn cái đầu tiên JFrame
, trong khi cái mới hiện ra. Sau khi đóng cái mới JFrame
, tôi loại bỏ nó, sau đó là hành động làm cho cái cũ hiển thị trở lại.
Lưu ý: Đoạn mã sau mở rộng câu trả lời của Ravinda và ng
là JButton
:
ng.addActionListener((ActionEvent e) -> {
setVisible(false);
JFrame j = new JFrame("NAME");
j.setVisible(true);
j.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
setVisible(true);
}
});
});
Thử đi:
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
Nó sẽ hoạt động.
implements WindowListener
để đoạn mã này hoạt động không? Nếu vậy, có thể tốt nếu đưa điều đó vào câu trả lời. Nếu không thì đây là một giải pháp thanh lịch.