A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

        有个窗口A,窗口中有若干的按钮,想要在点击其中的一个按钮的时候会出来另一个窗口B,此时想要通过B中的按钮或者B窗口中的X号将B关闭掉。
        此时我有两个方法:
        (1)调用frame类中的dispose()方法
        (2)调用setVisible(false)方法把界面隐藏

        这两种方法有没有什么区别?

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

6 个回复

倒序浏览
一个是隐藏,还能开启,一个已经关闭了。
回复 使用道具 举报
界面被隐藏,线程没有停止
回复 使用道具 举报
几率收割 来自手机 中级黑马 2015-7-1 12:14:36
板凳
一个是隐藏,还能开启,一个已经关闭了。
回复 使用道具 举报
GiveUp 发表于 2015-7-1 11:55
一个是隐藏,还能开启,一个已经关闭了。

释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源。即这些 Component 的资源将被破坏,它们使用的所有内存都将返回到操作系统,并将它们标记为不可显示。 通过随后调用 pack 或 show 重新构造本机资源,可以再次显示 Window 及其子组件。

这是API说明书中对dispose方法的描述。可以看到,使用dispose方法后再调用pack或者show可以重新开启,而且我发现使用setVisible(true)方法也可以将窗口重新显示。具体看我发的代码
回复 使用道具 举报
本帖最后由 溦丨涼 于 2015-7-1 17:01 编辑
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. class AwtDemo
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 Frame f = new Frame("my awt");
  8.                 //设置框架大小
  9.                 f.setSize(500,400);
  10.                 //设置框架在屏幕中出现的位置,左定点到屏幕左定点的距离
  11.                 f.setLocation(300,200);
  12.                 //设置布局管理器,frame默认为BoarderLayout
  13.                 f.setLayout(new FlowLayout());
  14.                 //想框架中加入按钮
  15.                 Button b = new Button("我是一个按钮");
  16.                 Button b3 = new Button("我是另一个按钮");
  17.                 f.add(b);
  18.                 f.add(b3);
  19.                 f.addWindowListener(new WindowAdapter()
  20.                 {
  21.                         public void windowClosing(WindowEvent e)
  22.                         {
  23.                                 Frame f1 = new Frame("确定结束程序吗?");
  24.                                 f1.setSize(250,100);
  25.                                 f1.setLocation(450,350);
  26.                                 f1.setLayout(new FlowLayout());
  27.                                 Button b1 = new Button("确定");
  28.                                 Button b2 = new Button("返回");
  29.                                 f1.add(b1);
  30.                                 f1.add(b2);
  31.                                 f1.setVisible(true);   
  32.                                 b1.addActionListener(new ActionListener()
  33.                                 {
  34.                                         public void actionPerformed(ActionEvent e)
  35.                                         {
  36.                                                 System.exit(0);
  37.                                         }
  38.                                 });
  39.                                 b2.addActionListener(new ActionListener()
  40.                                 {
  41.                                         public void actionPerformed(ActionEvent e)
  42.                                         {
  43.                                                 f1.dispose();
  44.                                         }
  45.                                 });
  46.                                 f1.addWindowListener(new WindowAdapter()
  47.                                 {
  48.                                         public void windowClosing(WindowEvent e)
  49.                                         {
  50.                                                 f1.setVisible(false);
  51.                                         }
  52.                                 });
  53.                                 b3.addActionListener(new ActionListener()
  54.                                 {
  55.                                         public void actionPerformed(ActionEvent e)
  56.                                         {
  57.                                                 f1.setVisible(true);
  58.                                                 //f1.pack();
  59.                                         }
  60.                                 });
  61.                         }
  62.                 });
  63.                 f.setVisible(true);
  64.         }
  65. }
复制代码
运行这段代码后,我按下f界面的x按钮会出现f1提示界面。我设置的是按下“返回”按钮调用dispose()方法,按下f1界面的x按钮调用setVisible(false)方法。而按下f界面中的“我是另一个按钮”是显示f1界面,不论我用dispose方法还是setVisible方法,都可以重新显示f1界面。
那dispose方法的关闭我setVisible的隐藏具体区别究竟是什么? 是不是dispose可以把占用的内存释放,而setVisible不能?


回复 使用道具 举报
dispose 会释放一定程度上的资源给垃圾回收机制,这是在你修改了默认窗口关闭方式的情况下,如果没有修改过这个的话,其实两者差不太多。
其实我也懂得不太多,也是刚学的新手。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马