1. 程式人生 > >GUI(圖形用戶界面)

GUI(圖形用戶界面)

lis 控件 card ace 狀態 group 結構 表示 eas

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(圖形用戶界面)