實例1:一個空的java窗口
// JFrameDemo1.java
import javax.swing.*; //使用Swing類,必須引入Swing包
public class JFrameDemo1{
public staticvoid main( String args[]) {
//定義一個窗體對象f,窗體名稱為"一個簡單窗口"
Jframe f = new JFrame("一個簡單窗口");
//設置窗體左上角與顯示屏左上角的坐標,
f.setLocation(300,300); //離顯示屏上邊緣300像素,里顯示屏左邊緣300像素
f.setSize(300,200); //設置窗體的大小為300*200像素大小
f.setResizable(false); //設置窗體是否可以調整大小,參數為布爾值
//設置窗體可見,沒有該語句,窗體將不可見,此語句必須有,否則沒有界面就沒有如何意義了
f.setVisible( true);
//用戶單擊窗口的關閉按鈕時程序執行的操作
f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
}
}
程序運行結果生成一個窗體。
可以根據程序代碼的注釋,依次修改相應的方法參數查看效果。
setDefaultCloseOperation(int operation):設置用戶在此窗體上發起 "close" 時默認執行的操作。方法中的參數解釋如下:
為“0”或DO_NOTHING_ON_CLOSE:
(在 WindowConstants 中定義):不執行任何操作;要求程序在已注冊的WindowListener 對象的 windowClosing 方法中處理該操作。
比如實例程序代碼中更改為f.setDefaultCloseOperation(f. DO_NOTHING_ON_CLOSE);或者f.setDefaultCloseOperation(0),然后查看效果,可以發現窗口無法關閉,下面是相同測試方法,不再解釋了。
為“1”或HIDE_ON_CLOSE
調用任意已注冊的 WindowListener 對象后自動隱藏該窗體。此時沒有關閉程序,只是將程序界面隱藏了。可以打開任務管理器,可以看到一個叫“java.exe”的進程(如果調試運行了多個java程序,則會看到多個“java.exe”的進程),如果此時用EditPlus測試程序,會發現當單擊窗口的關閉按鈕關閉窗口后,卻無法再次對程序進行調試,因為程序線程沒有關閉,在任務管理器中關閉java.exe(如果有多個“java.exe”的進程,則先都關閉掉,再來測試該問題)基礎后,EditPlus才可以重新編譯改程序。
為“2”或DISPOSE_ON_CLOSE
調用任意已注冊 WindowListener 的對象后自動隱藏並釋放該窗體。但繼續運行應用程序,釋放了窗體中占用的資源。
為“3”EXIT_ON_CLOSE(在 JFrame 中定義):使用 System exit 方法退出應用程序。僅在應用程序中使用。結束了應用程序。
默認情況下,該值被設置為 HIDE_ON_CLOSE。
當注釋掉實例中的f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);語句時,起到的效果和f.setDefaultCloseOperation(f. HIDE_ON_CLOSE); 或者f.setDefaultCloseOperation(1);一樣。
setDefaultCloseOperation();是用來設定窗口被關閉時(比如點擊了右上角的”x”)的行為。參數有:
DISPOSE_ON_CLOSE:隱藏當前窗口,並釋放窗體占有的其他資源。在窗口被關閉的時候會dispose這個窗口。
EXIT_ON_CLOSE:結束窗口所在的應用程序。在窗口被關閉的時候會退出JVM。
如果程序沒有其他線程在運行,當所有窗口都被dispose后,JVM也會退出。
代碼舉例:
1 |
import javax.swing.JFrame; |
2 |
import static javax.swing.JFrame.*; //引入JFramed的靜態常量 |
3 |
4 |
public class Example { |
5 |
public static void main(String[] args) { |
6 |
JFrame window1 = new JFrame( "窗口A" ); //創建帶標題的窗口 |
7 |
JFrame window2 = new JFrame( "窗口B" ); |
8 |
window1.setBounds( 600 , 100 , 180 , 100 ); //左,上,寬,高 |
9 |
window2.setBounds( 260 , 100 , 180 , 100 ); |
10 |
window1.setVisible( true ); |
11 |
window2.setVisible( true ); |
12 |
window1.setDefaultCloseOperation(DISPOSE_ON_CLOSE); |
13 |
window2.setDefaultCloseOperation(EXIT_ON_CLOSE); |
14 |
} |
15 |
} |
運行如圖:
單擊窗口A的關閉按鈕,只有窗口A被關閉。
單擊窗口B的關閉按鈕,兩個窗口都被關閉。
Post navigation