2014-02-11 32 views
1

我想設置關閉Jdialog的默認關閉操作。但是,我的進度條代碼覆蓋了結束事件。我不確定是否有地方寫出隱藏/簡單地關閉Jdialog上點擊X

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。 如果我將dialog.setVisible(true)放在其他地方的updateProgressBar()中,則jdialog進度條不會更新並按預期顯示。

所以,我的問題是如何調整代碼中的這兩個語句,以便我也能夠執行默認的關閉操作?

+0

你可以發佈一個[最小,完整,測試和可讀的示例](http://stackoverflow.com/help/mcve),更好地解釋什麼是不工作.. _after_你發佈MCTRE。 –

+0

謝謝,更新了我的問題以提供更好的清晰度。 – eros

回答

3

它看起來像你想顯示一個JDialog與一個進度欄。 Swing有自己的課,ProgressMonitor。截圖:

Screenshot of ProgressMonitor

如果這是你所需要的,是的Javadoc here,樣本/教程here

+0

當然,我已經擺脫了這種困境,並失去了與Jdialog的合作。我可以使用progressMonitor重新執行操作,看看它是如何發生的。感謝您讓我回到跟蹤:) – eros

0

要處理'X'的敲擊(以及在Windows上按Alt + F4或在任務管理器中關閉窗口),您可以添加一個WindowListenerdialog.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) { 
    } 
}); 

二樣本:

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. 
    } 
}); 

正如你可以看到,如果使用WindowAdapter,你可以挑選方法,您需要。

+0

謝謝你的意見。我已經嘗試過了windowClosing事件,但那沒有奏效,正如我所提到的,我的dialog.setVisible(true)每次更新都有文件上傳過程。這阻止了事件的發生。 – eros

相關問題