方法一:
我們提供的服務有:網站制作、成都網站建設、微信公眾號開發(fā)、網站優(yōu)化、網站認證、磐石ssl等。為千余家企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的磐石網站制作公司
類 JFrame
javax.swing.JFrame
JFrame中的方法void setDefaultCloseOperation(int)可以設置
以下為改方法的用法:
setDefaultCloseOperation
public void setDefaultCloseOperation(int operation)設置用戶在此窗體上發(fā)起
"close" 時默認執(zhí)行的操作。必須指定以下選項之一:
DO_NOTHING_ON_CLOSE(在 WindowConstants 中定義):不執(zhí)行任何操作;要求程序在已注冊的
WindowListener 對象的 windowClosing 方法中處理該操作。
HIDE_ON_CLOSE(在 WindowConstants 中定義):調用任意已注冊的 WindowListener
對象后自動隱藏該窗體。
DISPOSE_ON_CLOSE(在 WindowConstants 中定義):調用任意已注冊 WindowListener
的對象后自動隱藏并釋放該窗體。
EXIT_ON_CLOSE(在 JFrame 中定義):使用 System exit
方法退出應用程序。僅在應用程序中使用。
默認情況下,該值被設置為 HIDE_ON_CLOSE。更改此屬性的值將導致激發(fā)屬性更改事件,其屬性名稱為
"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);
//監(jiān)聽關閉按鈕的點擊操作
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();
}
}
如果實現了你第一個問題,后面的就都不存在了。
鎖住了主窗體,那么關閉操作,菜單點擊都不可能操作了。
下邊按問題一個一個解答,這是不考慮關聯性的,如果考慮關聯性。后兩個不可能與1同時存在。
1. 這個使用Dialog而不是Frame Dialog有model屬性,setModel(true); 這樣就是模態(tài)對話框,后面的都不可以操作了。
2.窗體關閉時,使用System.exit(0); 這樣,所有的就都關閉了。
3.打開一個新的,關閉已打開的,需要有前一個窗體的對象句柄。用可以設置成非顯示。
給你個小例子,已經添加注釋了。自己運行下看看效果,滿意的話記得結貼子!
import java.awt.BorderLayout;
import java.awt.CheckboxMenuItem;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestMenu extends Frame implements ActionListener{
TextArea ta; //文本區(qū)
MenuBar mb; //MenuBar 類封裝綁定到框架的菜單欄的
Menu mnFile,mnEdit,mnFormat,mnHelp; //從菜單欄部署的下拉式菜單組件
MenuItem miNew,miOpen,miSave,miSaveAs,miExit,miFont; //菜單中的所有項必須屬于類 MenuItem 或其子類之一
CheckboxMenuItem miBinary; //一個可包括在菜單中的復選框
public TestMenu(){
super("記事本"); //調用父類構造方法
ta = new TextArea("",20,20); //新建文本區(qū),第一個參數是默認文本,第二個參數是行數,第三個是列數
/*
* BorderLayout邊框布局
* 添加文本區(qū)到Frame,BorderLayout.CENTER是居中位置
* */
add(ta,BorderLayout.CENTER);
mb = new MenuBar(); //創(chuàng)建菜單欄對象
/*
* 創(chuàng)建菜單,指定菜單名
* */
mnFile= new Menu("文件");
mnEdit= new Menu("編輯");
mnFormat= new Menu("格式");
mnHelp= new Menu("幫助");
/*
* 創(chuàng)建子菜單,并指定名稱
* */
miNew= new MenuItem("新建");
miOpen= new MenuItem("打開");
miSave= new MenuItem("保存");
miSaveAs= new MenuItem("另存為");
miExit= new MenuItem("退出");
miExit.addActionListener(this); //為退出菜單添加監(jiān)聽
/*
* 添加上面創(chuàng)建的子菜單到文件菜單下
* */
mnFile.add(miNew);
mnFile.add(miOpen);
mnFile.add(miSave);
mnFile.add(miSaveAs);
mnFile.addSeparator(); //將一個分隔線或連字符添加到菜單的當前位置
mnFile.add(miExit);
miBinary= new CheckboxMenuItem("二進制"); //創(chuàng)建在復選框的子菜單
miFont= new MenuItem("字體"); //創(chuàng)建子菜單
/*
* 添加miBinary、miFont兩個子菜單到mnFormat(格式)下
* */
mnFormat.add(miBinary);
mnFormat.add(miFont);
/*
* 將文件、編輯、格式、幫助添加到菜單欄
* */
mb.add(mnFile);
mb.add(mnEdit);
mb.add(mnFormat);
mb.add(mnHelp);
setMenuBar(mb); //添加菜單欄到Frame
/*
* 關閉窗口時,關閉運行成語
* */
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public static void main(String args[]){
TestMenu tm=new TestMenu();
tm.setSize(300,200); //設置窗體的寬、高
tm.setLocation(300,100); //將組件移到新位置Component類方法
tm.setVisible(true); //設置顯示窗體,true為顯示,false為隱藏
}
/**
* 監(jiān)聽事件,實現ActionListener接口的actionPerformed方法
*/
public void actionPerformed(ActionEvent e){
String s = e.getActionCommand(); //獲取選中菜單的名稱
System.out.println(s);
if(s.equals("退出")){
System.exit(0); //停止運行程序
}
}
}
******************************************************************
新建類CloseFrame.java,代碼如下:
******************************************************************
import?java.awt.BorderLayout;
import?java.awt.FlowLayout;
import?java.awt.event.ActionEvent;
import?java.awt.event.ActionListener;
import?javax.swing.JButton;
import?javax.swing.JFrame;
import?javax.swing.JMenu;
import?javax.swing.JMenuBar;
import?javax.swing.JMenuItem;
import?javax.swing.JPanel;
public?class?CloseFrame?extends?JFrame?implements?ActionListener?{
JMenuBar?menu;
JMenu?file;
JMenuItem?closeMenu;
public?CloseFrame()?{
menu?=?new?JMenuBar();
file?=?new?JMenu("文件");
closeMenu?=?new?JMenuItem("關閉");
closeMenu.addActionListener(this);
JButton?closeButton?=?new?JButton("?關閉?");
closeButton.addActionListener(this);
JPanel?closePanel?=?new?JPanel();
closePanel.setLayout(new?FlowLayout());
closePanel.add(closeButton);
this.add(closePanel,?BorderLayout.CENTER);
this.add(menu,?BorderLayout.NORTH);
menu.add(file);
file.add(closeMenu);
this.setBounds(200,?100,?200,?120);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public?void?actionPerformed(ActionEvent?e)?{
System.exit(0);
}
public?static?void?main(String[]?args)?{
new?CloseFrame();
}
}
******************************************************************
運行結果如下:
******************************************************************