ฉันต้องการเรียกเมธอดconfirmExit()
เมื่อคลิกปุ่มปิดสีแดงของแถบหัวเรื่องของ JFrame
จับภาพเหตุการณ์นั้นได้อย่างไร?
ฉันต้องการป้องกันไม่ให้หน้าต่างปิดหากผู้ใช้เลือกที่จะไม่ดำเนินการต่อ
ฉันต้องการเรียกเมธอดconfirmExit()
เมื่อคลิกปุ่มปิดสีแดงของแถบหัวเรื่องของ JFrame
จับภาพเหตุการณ์นั้นได้อย่างไร?
ฉันต้องการป้องกันไม่ให้หน้าต่างปิดหากผู้ใช้เลือกที่จะไม่ดำเนินการต่อ
คำตอบ:
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);
}
}
});
หากคุณต้องการป้องกันไม่ให้หน้าต่างปิดเว้นแต่ผู้ใช้จะเลือก 'ใช่' คุณสามารถเพิ่ม:
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
แทนที่หน้าต่างวิธีการปิด
public void windowClosing(WindowEvent e)
จะถูกเรียกใช้เมื่อหน้าต่างอยู่ในระหว่างการปิด การดำเนินการปิดสามารถแทนที่ได้ในจุดนี้
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ยังใช้งานได้ ขั้นแรกให้สร้าง JFrame ที่เรียกว่าเฟรมจากนั้นเพิ่มรหัสนี้ด้านล่าง
confirmExit()
การตามวิธีที่ OP ต้องการ
confirmExit()
เมื่อคลิก [X]" และความคิดเห็นก่อนหน้านี้ไม่เกี่ยวข้องกับ OQ
สิ่งนี้อาจใช้ได้:
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");
}
});
ที่มา: https://alvinalexander.com/java/jdialog-close-closing-event
นี่คือสิ่งที่ผมใส่เป็นตัวเลือกเมนูที่ผมทำปุ่มบนเพื่อแสดงอีกJFrame
JFrame
ฉันต้องการให้เฉพาะกรอบใหม่เท่านั้นที่มองเห็นได้และไม่ทำลายกรอบที่อยู่เบื้องหลัง ตอนแรกฉันซ่อนตัวแรกJFrame
ในขณะที่อันใหม่ปรากฏให้เห็น เมื่อปิดตัวใหม่JFrame
ฉันก็กำจัดมันตามด้วยการทำให้คนเก่ามองเห็นได้อีกครั้ง
หมายเหตุ: รหัสต่อไปนี้ขยายออกจากคำตอบของ Ravinda และng
เป็น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);
}
});
});
ลองสิ่งนี้:
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
มันจะทำงาน.
implements WindowListener
เพื่อให้โค้ดนี้ทำงานหรือไม่ ถ้าเป็นเช่นนั้นอาจเป็นการดีที่จะรวมไว้ในคำตอบ มิฉะนั้นนี่เป็นทางออกที่สวยงาม