java窗口关闭当前窗口
㈠ java关闭当前窗口代码
方法一:
类 JFrame
javax.swing.JFrame
JFrame中的方法void setDefaultCloseOperation(int)可以设置
以下为改方法的用法:
setDefaultCloseOperation
public void setDefaultCloseOperation(int operation)设置用户在此窗体上发起
"close" 时默认执行的操作。必须指定以下选项之一:
DO_NOTHING_ON_CLOSE(在 WindowConstants 中定义):不执行任何操作;要求程序在已注册的
WindowListener 对象的 windowClosing 方法中处理该操作。
HIDE_ON_CLOSE(在 WindowConstants 中定义):调用任意已注册的 WindowListener
对象后自动隐藏该窗体。
DISPOSE_ON_CLOSE(在 WindowConstants 中定义):调用任意已注册 WindowListener
的对象后自动隐藏并释放该窗体。
EXIT_ON_CLOSE(在 JFrame 中定义):使用 System exit
方法退出应用程序。仅在应用程序中使用。
默认情况下,该值被设置为 HIDE_ON_CLOSE。更改此属性的值将导致激发属性更改事件,其属性名称为
"defaultCloseOperation"。
注:当 Java 虚拟机 (VM) 中最后一个可显示窗口被释放后,虚拟机可能会终止
要实现你说的,应该采用
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
方法二:
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Test extends JFrame {
public Test(){
this.setTitle("title");
this.setSize(300,200);
this.setLocation(100,100);
//设置关闭时什么也不做
this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
//监听关闭按钮的点击操作
this.addWindowListener(new WindowAdapter(){
//new 一个WindowAdapter 类 重写windowClosing方法
//WindowAdapter是个适配器类 具体看jdk的帮助文档
public void windowClosing(WindowEvent e) {
//这里写对话框
if(JOptionPane.showConfirmDialog(null,
"退出","提
示",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE)==JOptionPane.YES_OPTION){
System.exit(0);
}
}
});
this.setVisible(true);
}
public static void main(String[] args) {
new Test();
}
}
㈡ 如何在java程序中,当点击一个按钮后,关闭当前窗口,开启一个新的窗口。
首先分析需要的GUI技术
java中一般使用swing 和awt技术来实现图形界面,Swing组件较多,功能比较强大,所以这里使用Swing组件来实现。窗口使用(JFrame),按钮使用(JButton)。
设想一个符合题目需求的场景
两个窗口关联并且跳转,最常见的场景就是登陆了。
登陆窗口,输入用户名和密码,如果成功就跳转到主窗口
核心逻辑,跳转窗口的关键代码
一般可以隐藏本窗口(setVisible(false);),显示新窗口来实现窗口的跳转。
但是隐藏窗口,会在后面浪费系统资源。
如果不再使用该窗口,应该彻底销毁(dispose();),释放系统资源
代码和注释
LoginFrame 类
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
//LoginFrame登陆窗口功能实现用户登陆,如果成功就跳转
//LoginFrame继承于窗口类,并实现ActionListener接口
{
//申明需要的组件
JButtonjb1,jb2;//按钮
JTextFieldjtf1;//文本框
JPasswordFieldjpf1;//密码框
publicLoginFrame(){
//窗口属性的设置
setTitle("登陆窗");//窗口标题
setSize(300,180);//窗口大小
setLocationRelativeTo(null);//窗口居中
setDefaultCloseOperation(EXIT_ON_CLOSE);//关闭窗口则退出虚拟机
setLayout(newFlowLayout());//设置布局流式布局
JPaneljp=newJPanel(newGridLayout(4,1));//设置面板为表格布局4行1列
//第一行
JPaneljp1=newJPanel();
JLabeljl1=newJLabel("账号");
jtf1=newJTextField(12);
jp1.add(jl1);
jp1.add(jtf1);
jp.add(jp1);
//第二行
JPaneljp2=newJPanel();
JLabeljl2=newJLabel("密码");
jpf1=newJPasswordField(12);
jp2.add(jl2);
jp2.add(jpf1);
jp.add(jp2);
//第三行
JPaneljp3=newJPanel();
jb1=newJButton("登陆");
jb1.addActionListener(this);//添加动作响应器
jb2=newJButton("重置");
jb2.addActionListener(this);//添加动作响应器
jp3.add(jb1);
jp3.add(jb2);
jp.add(jp3);
//第四行
JPaneljp4=newJPanel();
JLabeljl3=newJLabel("提示:账号admin密码123");
jl3.setForeground(Color.DARK_GRAY);
jp4.add(jl3);
jp.add(jp4);
add(jp);
}
//动作响应
publicvoidactionPerformed(ActionEvente){
Stringcmd=e.getActionCommand();//根据动作命令,来进行分别处理
if(cmd.equals("登陆")){
Stringid=jtf1.getText();//取得用户名
Stringkey=newString(jpf1.getPassword());//取得密码
if(id.equals("admin")&&key.equals("123")){//判断是否登录成功
//如果登录成功
setVisible(false);//本窗口隐藏,
newMainFrame(id).setVisible(true);//新窗口显示
dispose();//本窗口销毁,释放内存资源
}else{
//如果登录失败弹出提示
JOptionPane.showMessageDialog(this,"用户名或者密码错误.","通知",JOptionPane.ERROR_MESSAGE);
clearText();//清空文本框密码框的输入
}
}elseif(cmd.equals("重置")){
clearText();
}
}
privatevoidclearText(){//清空文本框,密码框的输入
jtf1.setText("");
jpf1.setText("");
}
//main方法,程序的入口
publicstaticvoidmain(String[]args){
newLoginFrame().setVisible(true);//创建登录窗口,并可见
}
}
MainFrame类
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
{
publicMainFrame(Stringname){
setTitle("主窗口");//标题
setSize(300,260);//大小
setLocationRelativeTo(null);//居中
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPaneljp=newJPanel();
JLabeljl1=newJLabel("欢迎");
JLabeljl2=newJLabel(name);
jl2.setForeground(Color.BLUE);//设置文本颜色
JLabeljl3=newJLabel("使用系统.");
jp.add(jl1);
jp.add(jl2);
jp.add(jl3);
add(jp,BorderLayout.NORTH);
JTextAreajta=newJTextArea();
jta.setLineWrap(true);
jta.append("消息提示");
jta.append("消息!通知~!");
JScrollPanejsp=newJScrollPane(jta,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
add(jsp);
JPaneljp2=newJPanel();
JButtonjb=newJButton("退出");
jb.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
System.exit(0);//退出
}
});
jp2.add(jb);
add(jp2,BorderLayout.SOUTH);
}
}
运行效果图

㈢ java中关闭窗口的方法
1 package applicationGraphicsInOut;
2 import java.awt.*;
3 import java.awt.event.*;
4 public class ApplicationGraphicsInOut {
5 public static void main(String args[])
6 {
7 new FrameInOut();
8 }
9
10 }
11 class FrameInOut extends Frame implements ActionListener
12 {
13 Label prompt;
14 TextField input,output;
15 FrameInOut()
16 {
17 super("图形界面的Java Application程序");
18 prompt=new Label("请输入您的名字");
19 input=new TextField(6);
20 output=new TextField(20);
21 setLayout(new FlowLayout());
22 add(prompt);
23 add(input);
24 add(output);
25 input.addActionListener(this);
26 setSize(300,200);
27 setVisible(true);
28 }
29 public void actionPerformed(ActionEvent e)
30 {
31 output.setText(input.getText()+",欢迎你");
32 }
33 }
该程序在Eclipse下运行通过,但是就是不能关不掉!
什么原因呢?
其中有以下几种解决方法:
1:
把main函数改为如下
1 public static void main(String args[])
2 {
3 Frame fr=new FrameInOut();
4 fr.addWindowListener(new java.awt.event.WindowAdapter()
5 {
6 public void windowClosing(java.awt.event.WindowEvent e)
7 {
8 System.exit(0);
9 }
10 });
11
12 }
这种方法我有点不解,addWindowListener()括号里是怎么回事,我有点纳闷,我还没见过这样的形式,不过我猜可能是实现了java.awt.event.WindowAdapter()类里面的一个抽象方法windowClosing(),但是我真没有见过这种格式,求解释。
2:
对WINDOWS_CLOSING事件做出响应,每个窗口都有3个控制图标,其中最小化和最大化操作Frame可自动完成,而关闭窗口的操作不能通过单击关闭图标实现,需要程序专门书写有关的代码,其实这种方法与上一种一样,则不过换了一种格式,一种初学者更明白易懂的格式。
在FrameInOut()构造函数里面添加监听函数,添加监听函数之后构造函数如下:
FrameInOut()
{
super("图形界面的Java Application程序");
prompt=new Label("请输入您的名字");
input=new TextField(6);
output=new TextField(20);
setLayout(new FlowLayout());
addWindowListener(new HandleWin()); //添加监听函数,引发WindowEvent事件
add(prompt);
add(input);
add(output);
input.addActionListener(this);
setSize(300,200);
setVisible(true);
}
其中HandleWin()为内部类,主要实现WindowListener借口,添加监听之后会引发WindowEvent类代表的所以七中事件,具体情况如下:
(1)WINDOW_ACTIVATED:代表窗口被激活(在屏幕的最前方待命)。
(2)WINDOW_DEACTIVATED:代表窗口失活(其他窗口被激活后原活动窗口失活)。
(3)WINDOW_OPENED:代表窗口被打开。
(4)WINDOW_CLOSED:代表窗口被关闭(关闭窗口后发生)。
(5)WINDOW_CLOSING:代表窗口正在被关闭(指关闭前。如单击窗口标题栏上的关闭按钮时)。
(6)WINDOW_ICONIFIED:代表使窗口最小化成图标。
(7)WINDOW_DEICONIFIED:代表使窗口从图标恢复
在WindowEvent类的主要方法有:
public window getWindow();
此方法返回引发当前WindowEvent事件的具体窗口对象,与getSource()方法返回的是相同的事件引用。
HandleWin定义如下:
class HandleWin extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
(e.getWindow()).dispose();
System.exit(0);
}
}
HandleWin是窗口事件的裁剪类WindowAdapter的子类,重载了WindowClosing()方法。
当然也可以这样写HandleWin
1 class HandleWin implements WindowListener
2 {
3 public void windowClosing(WindowEvent e)
4 {
5 (e.getWindow()).dispose();
6 System.exit(0);
7 }
8
9 @Override
10 public void windowActivated(WindowEvent arg0) {
11 // TODO Auto-generated method stub
12
13 }
14
15 @Override
16 public void windowClosed(WindowEvent arg0) {
17 // TODO Auto-generated method stub
18
19 }
20
21 @Override
22 public void windowDeactivated(WindowEvent arg0) {
23 // TODO Auto-generated method stub
24
25 }
26
27 @Override
28 public void windowDeiconified(WindowEvent arg0) {
29 // TODO Auto-generated method stub
30
31 }
32
33 @Override
34 public void windowIconified(WindowEvent arg0) {
35 // TODO Auto-generated method stub
36
37 }
38
39 @Override
40 public void windowOpened(WindowEvent arg0) {
41 // TODO Auto-generated method stub
42
43 }
44 }
㈣ java中关闭当前窗口用什么代码
你用的 swing 吗?加上 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
或者加上窗口事件监听器:
addWindowListener(new WindowAdapter() {
public void windowClosing (WindowEvent we) {
dispose();
}
});
㈤ 关于java窗口关闭的问题
我碰见的有两种情况子窗口关闭导致父窗口也关闭!下面简单介绍一下。。
一种是常规的,java原装类库引起的最常见的:
[java]view plain
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
{
privateJButtonjb=newJButton("显示子窗口");
publicParentFrame(){
super("父窗口");
this.add(jb);
jb.addActionListener(this);
this.setBounds(100,100,200,300);
this.setVisible(true);
this.setDefaultCloseOperation(HIDE_ON_CLOSE);
}
@Override
publicvoidactionPerformed(ActionEvente){
newChildFrame();
}
publicstaticvoidmain(String[]args){
newParentFrame();
}
}
importjavax.swing.JFrame;
{
publicChildFrame(){
super("子窗口");
this.setBounds(200,200,200,300);
this.setVisible(true);
this.setDefaultCloseOperation(HIDE_ON_CLOSE);
}
publicstaticvoidmain(String[]args){
newChildFrame();
}
}
- 第二种是用地方放类库jfreeChart,在做图标的时候出现的。下面举例
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
{
privateJButtonjb=newJButton("显示子窗口");
publicParentFrame(){
super("父窗口");
this.add(jb);
jb.addActionListener(this);
this.setBounds(100,100,200,300);
this.setVisible(true);
this.setDefaultCloseOperation(HIDE_ON_CLOSE);
}
@Override
publicvoidactionPerformed(ActionEvente){
newChildFrame();
}
publicstaticvoidmain(String[]args){
newParentFrame();
}
}
importjavax.swing.JFrame;
{
publicChildFrame(){
super("子窗口");
this.setBounds(200,200,200,300);
this.setVisible(true);
this.setDefaultCloseOperation(HIDE_ON_CLOSE);
}
publicstaticvoidmain(String[]args){
newChildFrame();
}
}
- 注意第二种情况,不管怎么setDefaultCloseOperation都会全关闭,因为子窗口是继承了ApplicationFrame即整个应用。故所有父窗口都会关闭。
这种情况是setDefaultCloseOperation()参数选择的问题。
EXIT_ON_CLOSE做参数的时候使用的是System.exit方法退出应用程序。故会关闭所有窗口。
而HIDE_ON_CLOSE参数表示调用已注册的WindowListener对象后自动隐藏窗体。
[java]view plain
㈥ java中关闭当前窗口用什么代码
setDefaultCloseOperation(JFrame.EXIT_ON_CLOES)会让整个程序都退出
JFrame.DISPOSE_ON_CLOSE只让当前的窗口关闭而已
㈦ 如何在java程序中,当点击一个按钮后,关闭当前窗口,开启一个新的窗口
JButtonbtn=newJButton(newAbstractAction("关闭并打开"){@(ActionEvente){oldFrame.dispose();//关闭并销毁,无需销毁可采用oldFrame.setVisible(false);newFrame.setVisible(true);//打开新窗口}});
