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);//打開新窗口}});
