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);
windowClosing 메서드를 재정의합니다.
public void windowClosing(WindowEvent e)
창이 닫히는 중일 때 호출됩니다. 이 시점에서 닫기 작업을 무시할 수 있습니다.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
또한 작동합니다. 먼저 frame이라는 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
A는 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
가이 코드가 작동 하려면 선언 해야합니까? 그렇다면 답변에 포함하는 것이 좋습니다. 그렇지 않으면 이것은 우아한 솔루션입니다.