Java实现关闭子窗口,父窗口不关闭的方法实例


前言序锦


今天晚上写Java界面的时候发现一个问题,困惑了我老半天:就是当我想实现从一个界面中点击按钮进入另一个页面后,然后当我使用完毕后,想退出第二个页面,然后回退到第一个页面的时候,我发现这个时候非常奇怪我的页面都给关闭了,着实想了好久才把这个问题给解决掉,而其实这个问题只要你弄清楚原理,也就是很简单的了……


正文


需求描述

我想实现在一级主窗口上,通过点击一个按钮实现跳转到另一个我们需要进行操作的页面上,然后在这个页面上我们进行了相应的操作后,再点击关闭,关闭第二个二级窗口,但是保留第一个一级主窗口,如下图所示:

这是一个一级窗口,通过点击下面的余弦相似度分析,跳转到第二个页面上

这里写图片描述

这是第二个页面,通过进行对应的操作后,回退到第一个页面上

这里写图片描述

最后,剩下我们的一级界面继续操作,

这里写图片描述

分析

通过上面的需求分析,我们知道了自己想要实现一个什么样的功能,这个时候我们就需要知道,我们是要具体怎么做了……

第一步

我们肯定要创建两个窗口,一个父窗口,一个子窗口,我用的都是JFrame来创建窗口的;

第二步

我们创建窗口后,我们就需要对每个窗口来进行设置,达到我们想要的结果

第三步

两个窗口创建好,设置好,就需要来设置点击事件,实现跳转了

第四步

哈哈,没了,大功告成了……

代码奉上

//这是父窗口类
public class Indexer extends JFrame implements ActionListener{
    // 定义组件  
    private JPanel contentPane;
    private JButton jb_Cos;
    public static void main(String[] args) throws Exception {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try{
                    Indexer frame=new Indexer();     // 创建一个窗口
                    frame.setVisible(true);                                    
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }); 
    }
    public Indexer() throws IOException {
        setTitle("搜索引擎ing……");                           // 标题
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     // 设置关闭时推出JVM
        setSize(1200,800);                                   // 设置窗口大小
        setLocationRelativeTo(null);                        // 设置窗体居中
        contentPane=new JPanel();                           // 内容面板
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));      // 设置布局
        setContentPane(contentPane);
        JPanel panelSouth=new JPanel();
        contentPane.add(panelSouth,BorderLayout.SOUTH);
        jb_Cos = new JButton("文本相似度比较");
        jb_Cos.setForeground(Color.blue);
        panelSouth.add(jb_Cos);
        jb_Cos.addActionListener(this);
       }
        public void actionPerformed(ActionEvent e) {
        // 这是父窗口的按钮响应触发事件
        if(e.getSource() == jb_Cos){
            new windowsCanvas().initCanvas();
        }
    }
  } 
  //这是子窗口类
class windowsCanvas extends JFrame implements ActionListener, MouseMotionListener, MouseListener {
    JFrame f = new JFrame();

    public void initCanvas() {
        // 并进行注册监听事件
        setTitle("余弦相似度分析");                           // 标题
        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);     // 设置关闭时推出JVM
        setSize(1200,800);                                   // 设置窗口大小
        setVisible(true);                                   //设置窗口是否可见
        setLocationRelativeTo(null);                        // 设置窗体居中
        contentPane=new JPanel();                           // 内容面板
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));      // 设置布局
        setContentPane(contentPane);
    }   
    }

代码解析

这其中,其实很多设置方面的东西,我们都不需要去看,而我们主要要去看的两句代码:

//父窗口类中的
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

//子窗口类中的
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
这种情况是setDefaultCloseOperation()参数选择的问题。EXIT_ON_CLOSE做参数的时候使用的是System.exit方法退出应用程序。故会关闭所有窗口。而HIDE_ON_CLOSE参数表示调用已注册的WindowListener对象后自动隐藏窗体。这样我们在一级窗口上设置为EXIT_ON_CLOSE,则表示一级窗口点击关闭就是真的关闭了,而二级窗口设置上设置为HIDE_ON_CLOSE,则表示为点击关闭其实是隐藏窗口,则达到了一个关闭的效果,但是又不关闭父窗口的效果。

猜你喜欢

转载自blog.csdn.net/HuaCode/article/details/80685849