目錄
1.概念
2.布局管理器
3.AWT
4.Swing
一、概念
1、AWT (抽象窗口工具包)(Abstract Window Toolkit):提供的建立圖形用戶界面GUI(Graphics User Interface)的開發包。
2、java.awt包:提供GUI設計所使用的類和接口。主要包括 組件(Component)、容器(Container)、布局管理器(LayoutManager)。
3、組件不能獨立地顯示出來。必須要放在一定的容器中才可以顯示出來。
4、布局管理器(LayoutManager):用來管理組件放置在容器中的位置和大小的。
5、面板(Panel):是一種透明的容器,沒有標題,也沒有邊框,就像一塊透明玻璃。
二、布局管理器(LayoutManager)
使用布局管理器的注意點:
(1)在不作任何設置的前提下,用戶無法設置組件的屬性,都會被布局管理器覆蓋。使用的屬性無效。
(2)如果用戶想自己設置組件的位置和大小,需要將布局管理器設置為setLayout(null),才可以設置各個組件的屬性。
是Panel和Applet的默認布局管理器。
規則:從上到下、從左到右進行放置,一行放滿,然后在下一行繼續放置。
new FlowLayout( FlowLayout.LEFT, 20 ,40 ); 單位是像數
參數:(1)對齊方式。(2)組件間橫向距離。(3)組件間縱向距離。

public class test { public static void main(String[] args) { //定義一個窗體 Frame frame = new Frame(); //設置窗體的出現的坐標和大小 frame.setBounds(300, 20, 300, 400); //定義需要使用的流式布局 frame.setLayout(new FlowLayout()); //一行排滿后,就會在排在下一行 for(int i = 0; i < 10; i++) { frame.add(new Button("測試"+i)); } //允許顯示 frame.setVisible(true); } }
是Window、Frame、Dialog的默認布局管理器。該管理器把容器分為5個區域:North、South、East、West、Center、每一個區域只能放置一個組件。默認是Center位置。
規則:在頂層容器大小改變時,組件的位置不會改變。在使用add()組件的時候,必須要指定組件的位置。

public class test { public static void main(String[] args) { //定義一個窗體 Frame frame = new Frame(); //設置窗體的出現的坐標和大小 frame.setBounds(300, 20, 300, 400); //定義需要使用的邊界布局 frame.setLayout(new BorderLayout()); //使用add(*)需要指定組件的位置 frame.add("North",new Button("North")); frame.add("South",new Button("South")); //允許顯示 frame.setVisible(true); } }
是組件呈網格狀布局,平均占據容器的空間。
規則:當容器大小改變時,每一個組件還是平均占據容器的空間。也是按照從上到下、從左到右進行放置。
new GridLayout( 4,2 ); 參數:第一個行數。第二個列數

public class test { public static void main(String[] args) { //定義一個窗體 Frame frame = new Frame(); //設置窗體的出現的坐標和大小 frame.setBounds(300, 20, 300, 400); //定義需要使用的邊界布局 frame.setLayout(new GridLayout(4,2)); //添加8個組件 for(int i= 1; i <= 8; i++) { frame.add(new Button(""+i)); } //允許顯示 frame.setVisible(true); } }
處理兩個以上的成員共享同一個顯示的空間。把容器分成很多層。每一層顯示的空間占整個容器大小,但是每一層只能放一個組件。
常用方法:
first(Container parent) 顯示第一張卡片。 last(Container parent) 顯示最后一張卡片。
next(Container parent) 顯示下一張卡片。 previous(Container parent) 顯示前一張卡片。
show(Container parent,String name) 顯示指定卡片

public class test implements ActionListener{ private Panel panel,panel2,panel3;//設置面板 private Button button,button2,button3;//設置按鈕 private Frame frame;//設置窗體 private CardLayout cl = new CardLayout(); public test() {//構造器注入 button = new Button("第一個"); button2 = new Button("第二個"); button3 = new Button("第三個"); panel = new Panel(); panel2 = new Panel(); panel3 = new Panel(); frame = new Frame(); frame.setBounds(300, 20, 300, 100); frame.setLayout(cl); frame.add(panel,"第一層"); frame.add(panel2,"第二層"); frame.add(panel3,"第三層"); panel.add(button); panel2.add(button2); panel3.add(button3); button.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); frame.setVisible(true); } public static void main(String[] args) { test tt = new test(); } @Override public void actionPerformed(ActionEvent e) { cl.next(frame); } }
三、AWT
1、主要涉及三個對象:
(1)Event:事件類,以類的形式出現,如:KeyEvent。
(2)Event Source:事件源,發生事件的場所,如:Button。
(3)Event Handler:事件處理者,接收事件對象並對其進行處理。
在使用的時候需要先在容器中注冊事件監聽器。使用addXXListener()來注冊監聽器。
與AWT有關的所有事件類都由java.awt.AWTEvent類派生,也是EventObject類的子類。
2、主要分為:
(1)低級事件:指基於組件和容器的事件。
ComponentEvent(組件事件,組件尺寸的變化、移動)
ContainerEvent(容器事件,組件增加、移動)
WindowEvent(窗體事件,關閉窗口,窗口閉合,圖標化)
FocusEvent(焦點事件,焦點的獲取、丟失)
KeyEvent(鍵盤事件,按鍵的按下、釋放)
MouseEvent(鼠標事件,鼠標的點擊、移動)
(2)高級事件:基於語義上的事件
ActionEvent(動作事件,按鈕按下)
AdjustmentEvent(調節事件,滾動條上移動滑塊以調節數值)
ItemEvent(項目事件,選擇項目)
TextEvent(文本事件,文本對象改變)
AWT事件的層次圖
3、AWT事件類和接口(10個類,11個接口)
4、事件適配器(Adapter)
提供一種簡單的實現監聽器的手段,可以縮短程序代碼。由於java的單繼承機制。很多監聽器都已經有父類時,就無法采用事件適配器了。
對應的適配器有:CompinentAdapter(組件適配器)、ContainerAdapter(容器適配器)、FocusAdapter(焦點適配器)、KeyAdapter(鍵盤適配器)、MouseAdapter(鼠標適配器)、MouseMotionAdapter(鼠標運動適配器)、WindowAdapter(窗口適配器)
內部類(inner Class):是被定義另一個類中的類。內部類不但可以訪問外部成員方法和變量,並且容易實現功能。
public class test { //這是一個外部類 class test2{//這是一個內部類 } }
匿名類(Anonymous Class):當一個內部類只需要在創建時只調用一次,而且新類需要繼承於一個已有的父類或實現一個接口,才能考慮用到匿名類。匿名類不存在構造方法,它需要顯式調用一個無參的父類的構造方法,並且重寫父類的方法。
public class test { //這是一個外部類 public static void main(String[] args) { Frame frame = new Frame(); //new KeyAdapter()就是匿名類 frame.addKeyListener(new KeyAdapter() { }); } }
Button(按鈕)、Checkbox(復選框)、CheckboxGroup(復選框組)、Choice(下拉式菜單)、Canvas(畫布)、TextField(單行文本輸入區)、TextArea(文本輸入區)、List(列表)、Frame(框架)、Dialog(對話框)、Filedialog(文件對話框)、Menu(菜單)、MenuBar(菜單容器)、MenuItem(菜單項)、
主要查看AIP文檔進行使用。
四、Swing
由純java實現的輕量級組件,沒有本地代碼,不依賴操作系統的支持,這也是與AWT最大的區別。並且在顯示風格方面也是可以在不同平台上顯示不同的窗體風格。采用一種MVC的范式。
Swing的特性:
- 組件的多樣化:Swing的組件以"J"開頭,除了類似有AWT的一些組件外,還有增加了一些高層組件集合。如JTree
- MVC體系結構:Swing使用的MVC的體系結構,模型-視圖-控件。
- 可存取性支持:Swing的組件都實現了Accessible接口,提供對可存取性的支持。
- 支持通過鍵盤來代替鼠標的操作:
- 允許設置邊框:允許對組件設置一個或多個邊框,並且可以設計自己的風格邊框。
- 支持使用圖標:支持對組件添加圖片。
使用規則:Swing組件不能直接添加到頂層容器中,必定添加到一個與Swing頂層容器相關聯的內容面板上。內容面板就是頂層容器包含的一個普通的容器。
(1)根面板:由一個玻璃面板(ClassPane)、內容面板(ContentPane)、可選擇的菜單條(JMenuBar)組成。內容面板和可選擇菜單條放在同一個分層。玻璃面板默認是不可見的。
(2)分層面板:分為JLayeredPane、JDesktopPane。后者是前者的子類。專門用於容納內部框架(JInternalFrame)的。
(3)面板(JPanel):是輕量級容器組件,默認布局管理器是FlowLayout。
(4)分隔板(JSplitPane):分隔兩個組件,可以按照水平、垂直的方向分隔。
(5)選擇板(JTabbedPane):一組可以選擇的帶圖標的選項,每一個選項下面都可以顯示一個組件。
(6)工具欄(JToolBar):用於顯示常用工具控件的容器。
(7)內部框架(JInternalFrame):就像一個窗口在另一個窗口的內部。
其他組件:JScrollPane(滾動窗口)、JButton(按鈕)、JCheckBox(復選框)、JRadioButton(單選框)、JComboBox(選擇框)、JFileChooser(文件選擇器)、JLabel(標簽)、JList(列表)、JProgressBar(進程條)、JSlider(滑動桿)、JMenu(菜單)、JTable(表格)、JTree(樹)、JOptionPane(對話框)
主要查看AIP文檔進行使用。
處理上面的五種布局管理,Swing中還有一種BoxLayout。按照自上而下或者從左到右順序布局依次加入組件。使用的時候必須指明兩個參數:被布局的容器、BoxLayout的主軸。
AWT和Swing最主要的還是要查看API文檔進行使用。