前言序锦
今天晚上写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);