隐藏/只需单击X即可关闭Jdialog

时间:2014-02-11 03:48:35

标签: java swing applet jdialog

我正在尝试在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(). 为什么它不起作用 - 因为我的dialog.setVisible(true)方法中有updateProgessBar(),以显示我的文件上传量的更新进度。

每次进展时,dialog.setVisible becomes true都会覆盖setDefaultCloseOperation中写的init() method。 如果我将login.setVisible(true)存在于我的updateProgressBar()其他地方,则jdialog进度条不会更新并按预期显示。

所以,我的问题是如何在代码中调整这两个语句,这样,我还能够执行默认的关闭操作?

2 个答案:

答案 0 :(得分:3)

看起来您想要显示带有进度条的JDialog。 Swing有一个自己的类,ProgressMonitor。截图:

Screenshot of ProgressMonitor

如果这是你需要的,Javadoc是here,示例/教程是here

答案 1 :(得分:0)

处理&#39; X&#39; (以及在Windows上按Alt + F4或关闭任务管理器中的窗口),您可以添加WindowListenerdialog.addWindowListener(...);。由于WindowListener是一个包含许多您可能不需要的方法的界面,因此您也可以使用WindowAdapter

我将向您展示两个样本,而不是解释:

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,则可以选择所需的方法。