WindowClosing 이벤트 중에 처분되기 전에 실행해야하는 몇 가지 종료 단계가 있습니다. 모든 것이 올바르게 실행되고 있지만 종료 JFrame의 기존 JLabel에 종료 상태 메시지를 제공하는 기능을 추가하고 싶습니다. WindowClosing 이벤트 중에 JLabel 텍스트를 업데이트 할 수 있습니까?WindowClosing 이벤트 중 JFrame 객체를 어떻게 업데이트합니까?
답변
다음 코드를 사용하여 백그라운드에서 종료 단계를 실행 한 다음 JFrame을 닫습니다.
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
@Override
public Void doInBackground() {
// shutdown steps go here and can update the JLabel text
frame.dispose();
return null;
}
};
worker.execute();
}
});
확실히. 구성 요소가 상호 작용하기 전에 구성 요소가 삭제되지 않았는지 확인하십시오.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// update label here
}
});
JFrame은 WindowClosing 이벤트 중에 고정되거나 일시 중단되므로 모든 compnent 업데이트가 표시되지 않습니다. – Steve
내 이전 댓글을 업데이트했습니다. –
하지만 닫는 내에서 기존의 JLabel에 종료 상태 메시지를 제공 할 수있는 기능을 추가 할은
label.setText(....);
label.paintImmediately(label.getBounds());
를 JFrame의 청취자의 코드는 이벤트 파견에 실행
GUI가 모든 리스너 코드가 실행될 때까지 GUI 자체를 다시 칠할 수 없으므로 GUI가 닫힙니다.
paintImmediately(...)
은 구성 요소가 RepaintManager를 우회하여 바로 페인트 할 수있게합니다.
당신의 설명은 의미가 있지만, 나는 행운도없이 paintImmediately()를 사용해 보았습니다. 프레임은 여전히 닫는 이벤트 내부에서 업데이트되지 않습니다. – Steve
'JFrame'의 닫는 동작에 영향을주는 방법에 대한 설명은 [이 답변] (https://stackoverflow.com/a/7073630/418556)을 참조하십시오. –
Windowclosing 이벤트 중에 JFrame 구성 요소를 업데이트하는 주소가 어디에 있는지 알 수 없습니다. – Steve