圖形用戶界面
(GUI)
可以通過鍵盤或鼠標來響應用戶的操作,
Java
提供了
AWT
和
Swing
兩個包進行圖形用戶界面編程。
AWT
是一組
Java
類,此組
Java
類允許創建圖形用戶界面
(GUI)
,
AWT
提供用于創建生動而高效的
GUI
的各種組件。
AWT
是
Swing
的基礎,但是
AWT
仔圖形組件的繪制方面并不是完全的“平臺獨立”;
Swing
是一個帶有豐富組件的
GUI
工具包,它組成了
JFC
的用戶界面功能的核心部分。
AWT
的基本思想使:以面向對象的方法實現了一個跨平臺的
GUI
工具集,提供了各種用于
GUI
設計的標準組件。大致上可以將這些類歸納為:圖形界面組件、事件處理對象、圖形和圖像工具和布局管理器。
容器類(
Container
)
是
Component
類的子類,容器組件是一種特殊的組件,它的功能是包含其他基本的
GUI
組件。
即容器是可以存放組件的區域,可在容器上進行繪制和著色
。
java.awt
包中的
Container
類可直接或間接派生出兩個常用容器:框架(
Frame
類)和面板(
Panel
類)。框架是一個帶有邊框的獨立的窗口。面板是包含在窗口中的一個不帶邊框的區域。
Panel
沒有具體的圖形表示,但它卻是實現
GUI
結構化的一個至關重要的組件,通常用它來實現
GUI
基本組件的組合。
框架
Frame
:
創建的窗口式獨立于
Applet
和瀏覽器的可獨立運行的主窗口,通常用于開發桌面應用程序。它定義了一個包含標題條、系統菜單欄最大化
/
最小化按鈕及可選菜單條的完整窗口。當一個Frame窗口被創建以后,需要調用setSize()方法來設置窗口的大小,并調用setVisible()來顯示窗口。Frame默認的布局管理器是BorderLayout,默認的添加組件位置是BorderLayout.CENTER。
面板
Panel
:
面板不是一個單獨的窗口,它只是包含在窗口中的一個區域。面板是可以將許多組件組合起來的一種容器。最簡單創建面板的方式就是通過面板的構造函數
Panel()
來進行。必須將面板添加到窗體中。
Applet
的缺省布局是
FlowLayout
;
在沒有設置新的布局前,在容器中添加組件都按照該容器的缺省布局排列。
Applet
繼承自
Panel
,所以可以推斷
Panel
的默認布局管理器是
FlowLayout
,所以向其中添加組件的順序是自左向右,自上向下。
對話框
Dialog
:
也是一種容器,其默認的布局管理器是
BorderLayout
。有模式(
model
)和非模式(
modeless
)兩種,模式對話框只讓應用程序響應對話框內的事件而其他窗體中的事件則不能響應;而非模式對話框則可以響應其他窗體中的事件。
布局管理器:
在
AWT
中每個組件在容器中都應該有一個具體的位置和大小,我們想在容器中排列若干個組件時,會很難控制它們的大小和位置。為了簡化編程者對容器上的組件的布局控制,一個容器內的所有組件的顯示位置可以由一個
“
布局管理器
”
來管理,我們可以為容器指定不同的布局管理器,在不同的布局管理器下,同一組件將會有不同的顯示效果,并且我們不能完全按自己的意愿設置組件的大小和位置了。
??? 為了我們生成的圖形用戶界面具有良好的平臺無關性,
java
語言中提供了布局管理器這個工具來管理組件在容器中的布局,當容器需要對某個組件進行定位或判斷其大小尺寸時就會調用其布局管理器。所有布局都實現
LayoutManager
接口。
Java
中的布局類型包括以下幾種:
FlowLayout
(流式布局);
BorderLayout
(邊界布局)
;
GridLayout
(網格布局);
GridBagLayout
(網格包布局);
CardLayout
(卡片布局)。
布局類型的選用:
每個布局管理器都有自己特定的用途。要按行和列顯示幾個同樣大小的組件,
GridLayout
會比較合適;要在盡可能大的空間里顯示一個組件,就要選擇
BorderLayout
或
GridBagLayout
如何設置布局:
每個容器(
Container
對象)都有一個與它相關的缺省的布局管理器。
Applet
的缺省布局是
FlowLayout
;
在沒有設置新的布局前,在容器中添加組件都按照該容器的缺省布局排列。
可以通過
setLayout( )
方法為容器設置新的布局。
注意:
定義窗體的大小,如果是在構造函數中使用:
super.setBounds(0,0,400,300);
來實現,則在主函數中,只需要使用
f.show()
,或者
f.setVisible(true);
即可,但是如果是使用
getPreferredSize()
方法來設置窗體的大小,則還需要使用
f.pack();
語句。關閉窗體的方法有多種:
1
)添加事件監聽器:
f.addWindowListener(new WindowAdapter()??? //
對窗口事件進行監聽
(
關閉窗體事件
)
{???? public void windowClosing(WindowEvent e)
?????? {???? System.exit(0);? //
正常退出
Java
虛擬機
?
??? }
});
2
)構造函數中添加
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
語句
重寫如下的方法:
protected void processWindowEvent(WindowEvent e)?? //
對應前面的語句實現窗體的關閉功能
{???? super.processWindowEvent(e);
?????? if(e.getID()==WindowEvent.WINDOW_CLOSING)
?????? {???? System.exit(0);? //
正常退出
Java
虛擬機
?
??? }
}
3)JFrame
中的關閉窗體監聽事件
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //
關閉窗口操作(正常退出
JVM
)
JFramenoren
的
setDefaultCloseOperation()
方法只是將窗體隱藏,所以要將其改為
JFrame.EXIT_ON_CLOSE
才可以正常退出虛擬機,關閉窗體。
?