JFrame关闭问题

时间:2010-02-19 15:48:51

标签: java swing jframe

Say如果我有两个类,每个类中都有一个不同的JFrame,例如JFrame A和JFrame B(在单独的类中)。

现在,从JFrame A的构造函数中,我可以按下一个带有actionlistener的按钮,它将实例化另一个类,从而创建JFrame B.问题是当创建JFrame B时,两个JFrame都是可见的。如果我关闭JFrame B,那么JFrame A也会关闭。我怎样才能让JFrame B关闭?

由于

编辑DISPOSE_ON_CLOSE对我不起作用,它会关闭所有jframe。

一些示例代码:

public class classone {
  public classone() {
    JFrame a = new JFrame("this is A");
    classtwo newFrame = new classtwo(); 
  }
}

public class classtwo {
  public classtwo() {
    Jframe b = new JFrame("this is B");
    b.setDefaultCloseOperation(b.DISPOSE_ON_EXIT);
  }
}

请忽略任何语法错误,仅供演示。

4 个答案:

答案 0 :(得分:2)

对于JFrame B,将默认关闭操作设置为“dispose”,如下所示:

frameB.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

然后关闭子窗口不会关闭整个应用程序。

HTH! ; - )

答案 1 :(得分:1)

你在一帧上有DISPOSE_ON_CLOSE而在另一帧上有EXIT_ON_CLOSE吗?如果是这样,那就可以解释为什么你的程序过早退出。确保所有框架都设置为DISPOSE_ON_CLOSE

答案 2 :(得分:0)

只是DO_NOTHING_ON_CLOSE和WindowClosing方法中的addWindowListener显示一个JOptionPane.showConfirmDia,如果结果返回no(1)则返回; else system.exit(0); 全部

我看到了我的第一篇StackOverFlow帖子,真可惜!我正在编辑我的帖子。你就是这样;

到目前为止,我意识到依赖开发软件方法Swing变老了。我缺少像微软XAML这样的技术。

soyatec inc。有一些使用XAML与java的交易你可能看看,但“在我看来”不成功的工作。无论如何......

    JFrame frame=new JFrame();
    frame.addWindowListener(new WindowListener() {

        @Override
        public void windowClosing(WindowEvent e) {
            int result= JOptionPane.showConfirmDialog(JOptionPane.getRootFrame() //or your parent swing element
                    , "Sure ?");
            switch (result) {
            case 1:

                break;
            default:
                System.exit(0);
                break;
            }
        }

        @Override
        public void windowActivated(WindowEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void windowClosed(WindowEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void windowDeactivated(WindowEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void windowDeiconified(WindowEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void windowIconified(WindowEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void windowOpened(WindowEvent e) {
            // TODO Auto-generated method stub

        }
    }
            );

答案 3 :(得分:0)

我现在有问题了。就在您创建Window实例时,请说明此对象的生存方式,请查看此代码

...
        new JFrame(){
            @Override
            public synchronized void addWindowListener(WindowListener l) {
                // You may ask here also add windowClosing method and look at my previous post
                super.addWindowListener(l);
            }
        }.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
....