2017-12-19 25 views
-2

WindowClosing 이벤트 중에 처분되기 전에 실행해야하는 몇 가지 종료 단계가 있습니다. 모든 것이 올바르게 실행되고 있지만 종료 JFrame의 기존 JLabel에 종료 상태 메시지를 제공하는 기능을 추가하고 싶습니다. WindowClosing 이벤트 중에 JLabel 텍스트를 업데이트 할 수 있습니까?WindowClosing 이벤트 중 JFrame 객체를 어떻게 업데이트합니까?

+0

'JFrame'의 닫는 동작에 영향을주는 방법에 대한 설명은 [이 답변] (https://stackoverflow.com/a/7073630/418556)을 참조하십시오. –

+0

Windowclosing 이벤트 중에 JFrame 구성 요소를 업데이트하는 주소가 어디에 있는지 알 수 없습니다. – Steve

답변

0

다음 코드를 사용하여 백그라운드에서 종료 단계를 실행 한 다음 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(); 
    } 
}); 
0

확실히. 구성 요소가 상호 작용하기 전에 구성 요소가 삭제되지 않았는지 확인하십시오.

SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
      // update label here 
    } 
}); 
+0

JFrame은 WindowClosing 이벤트 중에 고정되거나 일시 중단되므로 모든 compnent 업데이트가 표시되지 않습니다. – Steve

+0

내 이전 댓글을 업데이트했습니다. –

0

하지만 닫는 내에서 기존의 JLabel에 종료 상태 메시지를 제공 할 수있는 기능을 추가 할은

label.setText(....); 
label.paintImmediately(label.getBounds()); 

를 JFrame의 청취자의 코드는 이벤트 파견에 실행

GUI가 모든 리스너 코드가 실행될 때까지 GUI 자체를 다시 칠할 수 없으므로 GUI가 닫힙니다.

paintImmediately(...)은 구성 요소가 RepaintManager를 우회하여 바로 페인트 할 수있게합니다.

+0

당신의 설명은 의미가 있지만, 나는 행운도없이 paintImmediately()를 사용해 보았습니다. 프레임은 여전히 ​​닫는 이벤트 내부에서 업데이트되지 않습니다. – Steve