黑马程序员技术交流社区
标题:
通过awt包创建窗口,将窗口关闭的问题
[打印本页]
作者:
溦丨涼
时间:
2015-6-30 23:32
标题:
通过awt包创建窗口,将窗口关闭的问题
有个窗口A,窗口中有若干的按钮,想要在点击其中的一个按钮的时候会出来另一个窗口B,此时想要通过B中的按钮或者B窗口中的X号将B关闭掉。
此时我有两个方法:
(1)调用frame类中的dispose()方法
(2)调用setVisible(false)方法把界面隐藏
这两种方法有没有什么区别?
作者:
GiveUp
时间:
2015-7-1 11:55
一个是隐藏,还能开启,一个已经关闭了。
作者:
孙嘉亮
时间:
2015-7-1 12:08
界面被隐藏,线程没有停止
作者:
几率收割
时间:
2015-7-1 12:14
一个是隐藏,还能开启,一个已经关闭了。
作者:
溦丨涼
时间:
2015-7-1 16:51
GiveUp 发表于 2015-7-1 11:55
一个是隐藏,还能开启,一个已经关闭了。
释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源。即这些 Component 的资源将被破坏,它们使用的所有内存都将返回到操作系统,并将它们标记为不可显示。 通过随后调用 pack 或 show 重新构造本机资源,可以再次显示 Window 及其子组件。
这是API说明书中对dispose方法的描述。可以看到,使用dispose方法后再调用pack或者show可以重新开启,而且我发现使用setVisible(true)方法也可以将窗口重新显示。具体看我发的代码
作者:
溦丨涼
时间:
2015-7-1 16:52
本帖最后由 溦丨涼 于 2015-7-1 17:01 编辑
import java.awt.*;
import java.awt.event.*;
class AwtDemo
{
public static void main(String[] args)
{
Frame f = new Frame("my awt");
//设置框架大小
f.setSize(500,400);
//设置框架在屏幕中出现的位置,左定点到屏幕左定点的距离
f.setLocation(300,200);
//设置布局管理器,frame默认为BoarderLayout
f.setLayout(new FlowLayout());
//想框架中加入按钮
Button b = new Button("我是一个按钮");
Button b3 = new Button("我是另一个按钮");
f.add(b);
f.add(b3);
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
Frame f1 = new Frame("确定结束程序吗?");
f1.setSize(250,100);
f1.setLocation(450,350);
f1.setLayout(new FlowLayout());
Button b1 = new Button("确定");
Button b2 = new Button("返回");
f1.add(b1);
f1.add(b2);
f1.setVisible(true);
b1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
b2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
f1.dispose();
}
});
f1.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
f1.setVisible(false);
}
});
b3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
f1.setVisible(true);
//f1.pack();
}
});
}
});
f.setVisible(true);
}
}
复制代码
运行这段代码后,我按下f界面的x按钮会出现f1提示界面。我设置的是按下“返回”按钮调用dispose()方法,按下f1界面的x按钮调用setVisible(false)方法。而按下f界面中的“我是另一个按钮”是显示f1界面,不论我用dispose方法还是setVisible方法,都可以重新显示f1界面。
那dispose方法的关闭我setVisible的隐藏具体区别究竟是什么? 是不是dispose可以把占用的内存释放,而setVisible不能?
作者:
GiveUp
时间:
2015-7-1 23:23
dispose 会释放一定程度上的资源给垃圾回收机制,这是在你修改了默认窗口关闭方式的情况下,如果没有修改过这个的话,其实两者差不太多。
其实我也懂得不太多,也是刚学的新手。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2