窗口是GUI編程的基礎(chǔ),小應(yīng)用程序或圖形界面的應(yīng)用程序的可視組件都放在窗口中,在GUI中,窗口是用戶屏幕的一部分,起著在屏幕中一個(gè)小屏幕的作用。有以下三種窗口:
Applet窗口:Applet類管理這個(gè)窗口,當(dāng)應(yīng)用程序程序啟動(dòng)時(shí),由系統(tǒng)創(chuàng)建和處理;
框架窗口(JFrame):這是通常意義上的窗口,它支持窗口周邊的框架、標(biāo)題欄,以及最小化、最大化和關(guān)閉按鈕;
一種無邊框窗口(JWindow):沒有標(biāo)題欄,沒有框架,只是一個(gè)空的矩形。
用Swing中的JFrame類或它的子類創(chuàng)建的對(duì)象就是JFrame窗口。
JFrame類的主要構(gòu)造方法:
- JFrame():創(chuàng)建無標(biāo)題的窗口對(duì)象;
- JFrame(String s):創(chuàng)建一個(gè)標(biāo)題名是字符串s的窗口對(duì)象。
JFrame類的其他常用方法:
- setBounds(int x,int y,int width,int height):參數(shù)x,y指定窗口出現(xiàn)在屏幕的位置;參數(shù)width,height指定窗口的寬度和高度。單位是像素。
- setSize(int width,int height):設(shè)置窗口的大小,參數(shù)width和height指定窗口的寬度和高度,單位是像素。
- setBackground(Color c):以參數(shù) c設(shè)置窗口的背景顏色。
- setVisible(boolean b):參數(shù)b設(shè)置窗口是可見或不可見。JFrame默認(rèn)是不可見的。
- pack():用緊湊方式顯示窗口。如果不使用該方法,窗口初始出現(xiàn)時(shí)可能看不到窗口中的組件,當(dāng)用戶調(diào)整窗口的大小時(shí),可能才能看到這些組件。
- setTitle(String name):以參數(shù)name設(shè)置窗口的名字。
- getTitle():獲取窗口的名字。
- setResiable(boolean m):設(shè)置當(dāng)前窗口是否可調(diào)整大小(默認(rèn)可調(diào)整大小)。
Swing里的容器都可以添加組件,除了JPanel及其子類(JApplet)之外,其他的Swing容器不允許把組件直接加入。其他容器添加組件有兩種方法:
一種是用getContentPane()方法獲得內(nèi)容面板,再將組件加入。例如,例5.1程序中的代碼:
1
|
mw.getContentPane().add(button); |
該代碼的意義是獲得容器的內(nèi)容面板,并將按鈕button添加到這個(gè)內(nèi)容面板中。
另一種是建立一個(gè)JPanel對(duì)象的中間容器,把組件添加到這個(gè)容器中,再用setContentPane()把這個(gè)容器置為內(nèi)容面板。例如,代碼:
1
2
3
|
JPanel contentPane = new JPanel(); … mw.setContentPane(contentPane); |
以上代碼把contentPane置成內(nèi)容面板。
【例】一個(gè)用JFrame類創(chuàng)建窗口的Java應(yīng)用程序。窗口只有一個(gè)按鈕。
1
2
3
4
5
6
7
8
9
10
|
import javax.swing.*; public class Example5_1{ public static void main(String args[]){ JFrame mw = new JFrame(“我的第一個(gè)窗口”); mw.setSize( 250 , 200 ); JButton button = new JButton(“我是一個(gè)按鈕”); mw.getContentPane().add(button); mw.setVisible( true ); } } |
用Swing 編寫GUI程序時(shí),通常不直接用JFrame創(chuàng)建窗口對(duì)象,而用JFrame派生的子類創(chuàng)建窗口對(duì)象,在子類中可以加入窗口的特定要求和特別的內(nèi)容等。
【例】定義JFrame派生的子類MyWindowDemo創(chuàng)建JFrame窗口。類MyWindowDemo的構(gòu)造方法有五個(gè)參數(shù):窗口的標(biāo)題名,加放窗口的組件,窗口的背景顏色以及窗口的高度和寬度。在主方法中,利用類MyWindowDemo創(chuàng)建兩個(gè)類似的窗口。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Example5_2{ public static MyWindowDemo mw1; public static MyWindowDemo mw2; public static void main(String args[]){ JButton static butt1 = new JButton(“我是一個(gè)按鈕”); String name1 = “我的第一個(gè)窗口”; String name2 = “我的第二個(gè)窗口”; mw1 = new MyWindowDemo(name1,butt1,Color.blue, 350 , 450 ); mw1.setVisible( true ); JButton butt2 = new JButton(“我是另一個(gè)按鈕”); mw2 = new MyWindowDemo(name2,butt2,Color.magenta, 300 , 400 ); mw2.setVisible( true ); } } class MyWindowDemo extends JFrame{ public MyWindowDemo(String name,JButton button,Color c, int w, int h){ super (); setTitle(name); setSize(w,h); Container con = getContentPane(); con.add(button); con.setBackground(c); } } |
顯示顏色由java.awt包的Color類管理,在Color類中預(yù)定了一些常用的顏色,參見表11-3。JFrame類的部分常用方法參見下表。
Color 類中定義的常用顏色
JFrame 類的部分常用方法