2014-02-11 1 views
1

Jdialog를 닫을 때 기본 닫기 작업을 설정하려고합니다. 그러나 내 진행 표시 줄 코드가 닫는 이벤트를 재정의합니다. 나는 쓸 곳이 확실하지 않았다.X를 클릭하면 Jdialog를 감추거나 단순히 닫으십시오.

dialog.setVisible(true); and dialog.setDefaultCloseOperation(HIDE_ON_CLOSE); 

진술.

이하는 내 init() method 및 내 Jdialog입니다. 검토하고 제안하십시오.

@Override 
     public void init() { 

      dialog = new JDialog(new JFrame(), "Progress", true); 
      dialog.setSize(300, 75); 
      dialog.setDefaultCloseOperation(HIDE_ON_CLOSE); 
      } 

     public void updateProgressBar(final int progress) { 
     dialog.setAlwaysOnTop(true); 
     for (i = 0; i <= 100; i = i + 1) { 

     SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
     progressBar.setValue(progress); 
     dialog.setVisible(true); 
     } 
     }); 
    } 
    if(progressBar.getValue()==100){ 
    dialog.dispose(); 
    System.out.println("File uploaded successfully!"); 
} 

는 여기에서 작동하지 않는 것이합니다 - dialog.setDefaultCloseOperation(). 가되어 작동하지 않는 이유는 - 내 파일 업로드의 업데이트 진행 상황을 보여주고, 내 updateProgessBar() 방법에 dialog.setVisible(true)을 가지고 있기 때문에.

dialog.setVisible becomes true 때마다 init() method에 쓰여진 setDefaultCloseOperation을 무시합니다. 내 updateProgressBar()에있는 dialog.setVisible (true)을 다른 곳에 배치하면 jdialog 진행률 막대가 업데이트되지 않고 예상대로 표시되지 않습니다.

제 질문은 코드 내에서이 두 문장을 어떻게 조정하여 기본 닫기 연산을 수행 할 수 있습니까?

+0

[최소, 완료, 테스트 및 읽을 수있는 예제] (http://stackoverflow.com/help/mcve)를 게시하고 MCTRE를 게시 한 후 작동하지 않는 사항을 더 잘 설명 할 수 있습니까? –

+0

더 나은 선명도를 제공하기 위해 제 질문을 업데이트 해 주셔서 감사합니다. – eros

답변

3

진도 표시 줄이있는 JDialog을 표시하려는 것 같습니다. 스윙은 자신 만의 클래스 인 ProgressMonitor을 가지고 있습니다. 스크린 샷 :

Screenshot of ProgressMonitor

즉 당신이 필요로하는 경우는, 자바 독은 here는, 샘플/튜토리얼 here입니다.

+0

물론, 나는 이것을 방해하고 Jdialog로 일하면서 길을 잃었습니다. progressMonitor를 사용하여 액션을 다시 수행하고 어떻게 진행되는지 볼 수 있습니다. 나를 추적 해 주셔서 감사합니다 :) – eros

0

Windows에서 Alt + F4를 누르거나 작업 관리자에서 창을 닫을 때뿐 아니라 'X'의 klick을 처리하려면 WindowListener : dialog.addWindowListener(...);을 추가 할 수 있습니다. WindowListener은 필요한 많은 메소드가있는 인터페이스이기 때문에 WindowAdapter을 사용할 수도 있습니다. 대신 explainging의

, 나는 당신에게 두 샘플을 보여줍니다 :

dialog.addWindowListener(new WindowListener() { 
    @Override 
    public void windowOpened(WindowEvent arg0) { 
    } 

    @Override 
    public void windowIconified(WindowEvent arg0) { 
    } 

    @Override 
    public void windowDeiconified(WindowEvent arg0) { 
    } 

    @Override 
    public void windowDeactivated(WindowEvent arg0) { 
    } 

    @Override 
    public void windowClosing(WindowEvent arg0) { 
     //User clicked 'X' 
    } 

    @Override 
    public void windowClosed(WindowEvent arg0) { 
     //Window is closed, now you can free resources if you need. 
    } 

    @Override 
    public void windowActivated(WindowEvent arg0) { 
    } 
}); 

두 번째 샘플 : 당신이 WindowAdapter를 사용하는 경우

dialog.addWindowListener(new WindowAdapter() { 

    @Override 
    public void windowClosing(WindowEvent arg0) { 
     //User clicked 'X' 
    } 

    @Override 
    public void windowClosed(WindowEvent arg0) { 
     //Window is closed, now you can free resources if you need. 
    } 
}); 

당신이 볼 수 있듯이, 당신은 단지 방법을 선택할 수 있습니다 당신 필요한 것.

+0

입력 해 주셔서 감사합니다. 이미 windowClosing 이벤트를 시도했지만 작동하지 않습니다. 언급 한대로 내 dialog.setVisible (true)가 업데이트 될 때마다 파일 업로드 진행률이 표시됩니다. 이로 인해 이벤트가 발생하지 않습니다. – eros

관련 문제