GUI(圖形用戶界面)
AWT概述
GUI全稱是Graphical User Interface,即圖形用戶界面,即應用程序提供給用戶操作的圖形界面,包括窗口、菜單、按鈕、工具欄和其它各種圖形界面元素
GUI設計提供了豐富的類庫,這些類分別位於java.awt和javax.swing包中,簡稱為AWT和Swing
Swing不僅實現了AWT中的所有功能,而且提供了更加豐富的組件和功能,足以滿足GUI設計的一切需求。
AWT事件處理
事件處理機制
事件處理機制專門用於響應用戶的操作,比如,想要響應用戶的點擊鼠標、按下鍵盤等操作,就需要使用AWT的事件處理機制
常用事件分類
窗體事件
WindowEvent用於表示這些窗體事件,在應用程序中,當對窗體事件進行處理時,首先需要定義一個類實現WindowListener接口作為窗體監聽器,然後通過addWindowListener()方法將窗體對象與窗體監聽器綁定
鼠標事件
MouseEvent類用於表示鼠標事件,幾乎所有的組件都可以產生鼠標事件,鼠標事件包括鼠標按下、鼠標松開、鼠標單擊等。
對鼠標事件的處理可通過實現MouseListener接口或者繼承適配器MouseAdapter類,然後調用addMouseListener()方法將監聽器綁定到事件源對象
鍵盤事件
鍵盤操作也是最常用的用戶交互方式,例如鍵盤按下、釋放等,這些操作被定義為鍵盤事件
KeyEvent類表示鍵盤事件,處理KeyEvent事件的監聽器對象需要實現KeyListener接口或者繼承KeyAdapter類。
動作事件
在Java中,動作事件用ActionEvent類表示,處理ActionEvent事件的監聽器對象需要實現ActionListener接口,但監聽器對象在監聽動作時,不會像鼠標事件一樣處理鼠標個別的移動和單擊的細節,而是去處理“按鈕按下”這樣“有意義”的事件。
布局管理器
FlowLayout流式布局管理器
使用FlowLayout布局管理器時,容器會將組件按照添加順序從左向右放置。當到達容器的邊界時,會自動將組件放到下一行的開始位置。這些組件可以左對齊、居中對齊(默認方式)或右對齊的方式排列
BorderLayout邊界布局管理器
是一種較為復雜的布局方式,它將容器劃分為五個區域,分別是東(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER)。組件可以被放置在這五個區域的中任意一個。
GridLayout網格布局管理器
使用縱橫線將容器分成n行m列大小相等的網格,每個網格中放置一個組件。
GridBagLayout網格包布局管理器
與GridLayout布局管理器類似,不同的是,它允許網格中的組件大小各不相同,而且允許一個組件跨越一個或者多個網格。
CardLayout卡式布局管理器
將界面看做一系列卡片,在任何時候只有其中一張卡片是可見的,這張卡片占據容器的整個區域。
BoxLayout盒子布局管理器
不使用布局管理器
如果不希望通過布局管理器對容器進行布局,可以調用容器的setLayout(null)方法,將布局管理器取消。
不使用布局管理器時,程序必須調用容器中每個組件的setSize()和setLocation()方法或者是setBounds()方法(這個方法接收四個參數,分別是左上角的x、y坐標和組件的長、寬)來為這些組件在容器中定位
Swing
編程理念
MVC模式
模型M(數據)和視圖V(顯示)分離,通過控制器C將二者松散耦合在一起
觀察者模式
迪米特法則
監聽器(接口回調)
匿名內部類(就地實例化接口對象)
窗口類實現監聽器接口並重寫回調方法
內部類實現監聽器接口並重寫回調方法
創建內部類對象作為一個或多個控件的監聽器
內部類可以訪問外部類的私有成員(控件)
缺省適配器
MouseListener / MouseMotionListener / MouseWheelListener
MouseAdapter
KeyListener
KeyAdapter
WindowListener
WindowAdapter
窗口
JFrame
JFrame和Frame一樣是一個獨立存在的頂級窗口,不能放置在其它容器之中,JFrame支持通用窗口所有的基本功能,例如窗口最小化、設定窗口大小等等
JDialog
JDialog是Swing的另外一個頂級窗口,它和Dialog一樣都表示對話框
JDialog對話框可分為兩種:模態對話框和非模態對話框。
非模態對話框
允許用戶在處理對話框的同時與其它窗口交互
模態對話框
指用戶需要等到處理完對話框後才能繼續與其它窗口交互
JInternalFrame多文檔窗口(子窗口)
JWindow無邊框的窗口
中間容器
JPanel
和AWT中的Panel組件使方法基本一致,它是一個無邊框,不能被移動、放大、縮小或者關閉的面板,它的默認布局管理器是FlowLayout。當然也可以使用構造函數JPanel(LayoutManager layout)或者它的setLayout()方法為其制定布局管理器。
JScrollPane帶滾動條
帶有滾動條的面板容器,而且這個面板只能添加一個組件,如果想往JScrollPane面板中添加多個組件,應該先將組件添加到JPanel中,然後將JPanel添加到JScrollPane中
JSplitPane帶分割條
JTabbedPane帶頁簽(選項卡)
JDesktopPane可以放子窗口
文本組件
用於接收用戶輸入的信息或向用戶展示信息,其中包括文本框(JTextField)、文本域(JTextArea)等,它們都有一個共同父類 JTextComponent,JTextComponent是一個抽象類,它提供了文本組件常用的方法
JTextComponent 類有兩個子類,分別是JTextField和JTextArea
JTextField:稱為文本框,它只能接收單行文本的輸入
JTextArea:JTextArea稱為文本域,它能接收多行的文本的輸入
按鈕組件
常見的按鈕組件有JButton、JCheckBox、JRadioButton等,它們都是抽象類AbstractButton類的直接或間接子類
JCheckBox組件被稱為復選框,它有選中(是)/未選中(非)兩種狀態,如果用戶想接收的輸入只有“是”和“非”,則可以通過復選框來切換狀態。如果復選框有多個,則用戶可以選中其中一個或者多個。
JRadioButton組件被稱為單選按鈕,與JCheckBox復選框不同的是,單選按鈕只能選中一個,就像收音機上的電臺選擇按鈕,當按下一個,先前按下的按鈕就會自動彈起,對於JRadioButton按鈕來說,當一個按鈕被選中時,先前被選中的按鈕就會自動取消選中。
JComboBox
被稱為組合框或者下拉列表框,它將所有選項折疊收藏在一起,默認顯示的是第一個添加的選項。當用戶點擊組合框時,會出現下拉式的選擇列表,用戶可以從中選擇其中一項並顯示。
菜單組件
菜單組件分為下拉式菜單和彈出式菜單
下拉式菜單包括JMenuBar(菜單欄)、JMenu(菜單)和JMenuItem(菜單項)
JMenuBar:表示一個水平的菜單欄,它用來管理菜單,不參與同用戶的交互式操作。
JMenu:表示一個菜單,它用來整合管理菜單項。菜單可以是單一層次的結構,也可以是多層次的結構。
JMenuItem:JMenuItem表示一個菜單項,它是菜單系統中最基本的組件。和JMenu菜單一樣,在創建JMenuItem菜單項時,通常會使用 JMenumItem(String text)這個構造方法為菜單項指定文本內容
創建下拉式菜單的步驟如下所示:
1、創建一個JMenuBar菜單欄對象,將其放置在JFrame窗口的頂部
2、創建JMenu菜單對象,將其添加到JMenuBar菜單欄中
3、創建JMenuItem菜單項,將其添加到JMenu菜單中
在Java的Swing組件中,彈出式菜單用JPopupMenu表示
JPopupMenu彈出式菜單和下拉式菜單一樣都通過調用add()方法添加JMenuItem菜單項,但它默認是不可見的,如果想要顯示出來,則必須調用它的show(Component invoker,int x,int y)方法
常用控件
基本控件
JLabel標簽
Icon
Font
JButton按鈕
JTextField文本框
JPasswordField密碼框
JRadioButton單選按鈕ButtonGroup
JCheckBox復選框
JCombBox下拉列表ListCellRender
JList列表ListCellRender
JTextArea文本域
JOptionPane彈出式模態對話框
JFileChooser文件選擇器
JColorChooser顏色選擇器
高級控件
JMenu菜單JMenuItem菜單項
JPopupMenu上下文菜單(右鍵菜單)JMenuItem菜單項
JToolBar工具欄
JEditorPane編輯面板
JProgressBar進度條
JSlider滑動條
JSpinner微調器
JTable表格TableCellRender
JTree樹TreeCellRender
AWT繪圖
update(Graphics g)
repaint()
paint(Graphics g)
Swing繪圖
paintComponent(Graphics g)
paintBorder(Graphics g)
paintChildren(Graphics g)
GUI(圖形用戶界面)