如何在不关闭调用它的类的情况下使用JFrame关闭一个被调用的类?

时间:2015-07-29 20:44:58

标签: java

我似乎有一个相当独特的问题,我在这里搜索了一段时间没有找到答案。我有一个类,它有一个带有两个按钮的简单JFrame。每个按钮调用不同类的Main方法,如下:

checkRuling = new JButton("Check Your Deck's Rulings");
  checkRuling.addActionListener(new ActionListener() {
     public void actionPerformed (ActionEvent e) {
        ReadHtmlCardDatabase.main(null);
     }
  });

一个调用一个类,它将一系列输入带入文本字段,并从输入创建一个格式化的html文档,另一个将html文档加载到JEditorPane中。我的问题是,当我关闭子类的一个JFrame(输入或html加载器之一)时,它完全退出我的程序,并且我想保持主类(使用两个按钮)打开。我尝试过使用:

close = new JButton("CLOSE");
     close.addActionListener(new ActionListener() {
        public void actionPerformed (ActionEvent e) {
          System.exit(1);
        }
     });

在子类中的按钮上,无济于事。单击按钮时,它只会退出所有内容。我也尝试过使用:

JFrame.DISPOSE_ON_EXIT

对于子类,但是这会导致JFrames在没有子类实际关闭的情况下消失,因此保存html文档的第一个实际上从未实际保存它,并且打开相同html文档的第二个子类赢得了#t; t工作,因为它没有得到保存。任何帮助将不胜感激,因为我无法弄清楚如何做到这一点。

3 个答案:

答案 0 :(得分:0)

正如Fast Snail在评论中所说,你不应该调用主要方法。实例化一个完成每个功能的类。开始使用时,使用setVisible(true)将框架设置为可见,然后在完成后setVisible(false)。因此,在动作侦听器中,只需更改可见性。

然后,假设你没有任何过于狂野的事情,那么你设置为隐形的框架应该超出范围并获得释放,这样内存就不会被扯掉。您只需在每次需要时实例化ReadHtmlCardDatabase类的新副本。或者您可以根据需要设置一个可见/不可见的静态副本。

答案 1 :(得分:0)

  

其中一个JFrame

您应该只在GUI中使用一个JFrame。对于其他窗口,您可以使用例如JDialog或JWindow。 这应该有所帮助,如果不是你可以随时使用frame.setVisible(false)而不是近距离处置,但它不是很整洁。

答案 2 :(得分:0)

感谢发表评论然后将其删除的人,我已经找到了自己的问题。我只需用这个替换我的主要电话:

setDeck = new JButton("Set Deck");
  setDeck.addActionListener(new ActionListener() {
     public void actionPerformed (ActionEvent e) {
        WriteHtmlCardDatabase w = new WriteHtmlCardDatabase();
        w.main(null);
     }
  });

谢谢!