1

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

现在从 JFrame AI 的构造函数中可以按下一个附加了 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

4 回答 4

2

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

frameB.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

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

!;-)

于 2010-02-19T15:51:25.667 回答
1

你有DISPOSE_ON_CLOSE一个框架和EXIT_ON_CLOSE另一个?如果是这样,那么这将解释为什么您的程序过早退出。确保所有帧都设置为DISPOSE_ON_CLOSE

于 2010-02-19T18:51:10.787 回答
0

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

我看到了我的第一个 StackOverFlow 帖子,真可惜!我正在编辑我的帖子。你在这里;

直到现在,我才意识到依赖开发软件的方式 Swing 越来越老了。我缺少像 Microsofts XAML 这样的技术。

大豆技术公司 有一些使用 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

        }
    }
            );
于 2010-08-06T12:42:39.640 回答
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);
....
于 2010-08-06T12:49:40.013 回答