第五小節之GUI(圖形用戶界面)

GUi:全程是Graphical User Interface,即圖形用戶界面,就是應用程序提供給用戶操做的圖形界面,包括窗口、菜單、按鈕、工具欄和其它各類圖形界面元素。提供了豐富的類,這些類分別位於java.awt和javax.swing包中,簡稱AWT和Swingjava

AWT:用於建立圖形用戶界面的一個工具包,它提供了一系列用於實現圖形界面的組件。分爲兩大類:component和MenuComponent。其中MenuComponent是全部與菜單相關的組件的父類,Component則是除菜單外其餘AWT組件的父類,他表示一個能以圖形化方式顯示出來,並可與用戶交互的對象。算法

Component類一般稱爲組件,根據Component的不一樣做用,可將其分爲基本組件類和容器類。Component類的一個子類Container,表示爲一個容器,它是一個特殊的組件,能夠用來容納其餘組件。框架

顯示分辨率(屏幕分辨率)是屏幕圖像的精密度,是指顯示器所能顯示的像素的多少。ide

圖像分辨率則是單位英寸中所包含的像素點數,其定義趨近於分辨率自己的定義。函數

矢量圖是由計算機的算法產生的,能夠無限的放大或縮小,不會有任何損失,一般有矢量軟件製做工具

位圖是由一個一個的小色塊組成,放大後會看見那些小色塊,同一面積內小色塊越多分辨率就越高佈局

GBK:三原色0~255 254種灰度級學習

分辨率:主要是指顯示器所能顯示的像素的多少,能夠從顯示分辨率與圖像分辨率兩個方向分類字體

一、window類是不依賴其餘容器而獨立存在,它有兩個子類,分別是Frame類和Dialog類。Frame類用於建立一個具備標題欄的框架窗口,做爲程序的主界面。Dialog類用於建立一個對話框,實現與用戶的信息交互。this

二、Panel面板 Panel也是一個容器,可是它不能單獨存在,只能存在其餘容器,一個Panel對象表明了一個長方形的區域,在這個區域中能夠容納其餘組件。在程序中一般會使用Panel來實現一些特殊的佈局。

AWT事件處理

  事件處理機制專門相應用戶的操做,好比,想要用戶的點擊鼠標,按下鍵盤燈操做,就須要使用ATW的事件處理機制。

    事件對象:封裝了GUI組件上發生的特定事件(一般就是用戶的一次操做)。

    事件源(組件):事件發生的場所,一般就是產生事件的組件。

    監聽器(Listener):負責監聽事件源上發生的事件,並對各類事件做出相應的處理的對象(對象中包含事件處理器)

    事件處理器:監聽器對象對接收的事件對象進行相應處理的方法。

事件源是一個組件,當用戶進行一些操做時,如按下鼠標或釋放鍵盤等,這些動做會觸發相應的事件。若是事件源註冊了事件監聽器,則觸發的相應事件將會被處理。

在程序中,若是想實現事件的監聽機制,首相須要定義一個類事件事件監聽器的接口。例如:Window類型的窗口須要實現WindowListener。接着經過addWinListener()方法爲事件源註冊事件監聽器對象,當事件源上發生事件時,便會觸發事件監聽器對象,由事件監聽器調用相應的方法來處理相應的事件。

事件適配器:JDk提供了一些適配器類,它們是監聽器接口的默認實現類,這些實現類中實現了接口的全部方法,但方法中沒有任何代碼。程序能夠經過繼承適配器類來達到實現監聽器接口的目的。幾乎全部的監聽器接口都有對應的適配器類,同過繼承適配器類來實現監聽器接口時,須要處理哪一種事件,直接重寫該事件對應的方法便可。

 1 package event;
 2 
 3 import java.awt.BorderLayout;
 4 import java.awt.Container;
 5 import java.awt.event.KeyEvent;
 6 import java.awt.event.KeyListener;
 7 import java.awt.event.MouseEvent;
 8 import java.awt.event.MouseListener;
 9 import java.awt.event.MouseMotionListener;
10 import java.awt.event.WindowAdapter;
11 import java.awt.event.WindowEvent;
12 import java.awt.event.WindowListener;
13 
14 import javax.swing.JFrame;
15 import javax.swing.JLabel;
16 import javax.swing.JTextArea;
17 
18 public class WindowAdapterFrame extends JFrame {
19     // 1. 屬性
20 
21     // 2. 方法
22     public WindowAdapterFrame() {
23         this.setTitle("窗口適配器");
24         setSize(600, 400);
25         setResizable(false);
26         setLocationRelativeTo(null);
27         //setDefaultCloseOperation(EXIT_ON_CLOSE);
28         
29         WindowListener listener = new WindowAdapter() {
30             @Override
31             public void windowClosing(WindowEvent arg0) {
32                 dispose();
33             }
34         };
35         
36         this.addWindowListener(listener);
37     }
38 
39     public static void main(String[] args) {
40         JFrame frame = new WindowAdapterFrame();
41         frame.setVisible(true);
42     }
43 }

經常使用事件分類:窗體事件、鼠標事件、鍵盤事件、動做事件

佈局管理器:組件不能單獨存在,必須放置於容器當中,而組件在容器中的位置和尺寸是由佈局管理器來決定的。在Java.awt包中提供了五中佈局管理器,分別是FlowLayout(流式佈局管理器)、BorderLayout(邊界佈局管理器)、GridLayout(網格佈局管理器)、BorderLayout(邊界佈局管理器)、GirdLayout(卡片佈局管理器)。每一個容器在建立時都會使用一種默認的佈局管理器,在程序中能夠經過容器對象的setLayout()方法設置佈局管理器,經過佈局管理器來自動進行組件的佈局管理。例如把一個Frame窗體的佈局管理器設置爲FlowLayout,代碼以下:

1 Frame frame=new Frame();
2 frame.setLayout(new FlowLayout);

  FlowLayout:容器會將組件按照添加順序從左向右放置、從上到下,當到達容器的邊界時,會自動將組件放到下一行的開始位置。這些組件能夠左對齊,居中對齊(默認方式)、或右對齊的方式排列

  FlowLayout的構造方法:

    FlowLayout()組件默認居中對齊,水平、垂直間距默認爲5個單位

    FlowLayout(int align)指定組件相對於容器的對齊方式,水平、垂直間距默認爲5個單位

    FlowLayout(int align,int hgap,int vgap)指定組件的對齊方式和水平、垂直間距

其中參數align決定組件在每行中相對於容器邊界的對齊方式,可使用該類中提供的常量做爲參數傳遞給構造方法,其中FlowLayout.LEFT用於表示左對齊、FlowLayout.RIGHT用於表示右對齊、FlowLayout.CENTER用於表示居中對齊。參數hgap和參數vgap分別設定組件之間的水平和垂直間隙,能夠填入一個任意的數值

BorderLayout(邊界佈局管理器)它將容器劃分爲5個區域,分別是東(EAST)、南(SOUTH)、西(NORTH)、中(CENTER)。組件能夠被放置在這五個區域的中任意一個。當向BorderLayout佈局管理器的容器中添加組件時,須要使用add(Component comp,Object constraints)方法,其中參數constraints是Object類型,在傳參時可使用BorderLayout類提供的5個常量,它們分別是EAST、SOUTH、WEST和CENTER。若是不指定添加到哪一個區域,則默認添加到CENTER區域,而且每一個區域只能放置一個組件,若是向一個區域中添加多個組件時,後放入的組件會覆蓋先放入的組件。

GridLayout(網格佈局管理器)使用縱橫線將容器分紅n行m列大小相等的網格,每一個網格中放置一個組件。添加到容器中的組件首先放置在第一行第一列(左上角)的網格中,而後在第一行的網格中從左向右依次放置其餘組件,行滿後,繼續在下一行中從左向右放置組價。與FlowLayout不一樣的是,放置在GridLayout佈局管理器中的組件將自動佔據網格的整個區域。

  GridLayout構造方法:

    GridLayout()默認只有一行,每一個組件佔一列

    GridLayout(int rows,int cols)指定容器的行數和列數

    GridLayout(int rows,int cols,int hgap,int vgap)指定容器的行數和列數以及組件之間的水平、垂直間距

 特色:組件的相對位置不隨區域的縮放而改變,但組件的大小會隨之改變,組件始終佔據網格的整個區域。缺點是老是忽略組件的最佳大小,全部組件的寬高都相同。

GridBagLayout(網格包佈局管理器)是最靈活、最複雜的佈局管理器。與GridLayout佈局管理器相似,不一樣的是,它容許網格中的組件大小各不相同,並且容許一個組件跨越一個或多個網格

CardLayout(卡片佈局管理器)卡片佈局管理器將界面看做一些列卡片,在任什麼時候候只有其中一張卡片是可見的,這張卡片佔據容器的整個區域。

不使用佈局管理器:當一個容器被建立後,它們都會有一個默認的佈局管理器。window、Frame和Dialog的默認佈局管理器是BorderLayout,Panel的默認佈局管理器是FlowLayout。若是不但願經過佈局管理器來對容器進行佈局,也能夠調用容器的setLayout(null)方法,將佈局管理器取消。在這種狀況下,程序必須調用容器中每一個組件的setSize()和setLocationO方法或者是setBounds()方法(這個方法接收四個參數;分別是左上角的x、y座標和組件的長、寬)來爲這些組件在容器中定位。

AWT繪圖:在java.awt包中專門提供了一個Craphis 是它至關於一個抽象的畫筆,其中提供了各類經制圖形的方法,使用Graphics類的方法就能夠完成在組件上繪製圖形。

  Graphics經常使用方法

  void setColor(Color c)將此圖形上下文的顏色設置爲指定顏色

  void setFont(Font f)將此圖形上下文的字體設置爲指定字體

  void drawLine(int xl,int yl.int x2,int y2)以(x1,y1)和(x2,y2)爲端點繪製一條線段

  void drawRet(int x.int y.inwidth, int height)繪製指定矩形的邊框矩形的左邊緣和右邊緣分別位於x和x+width,上邊緣和下邊緣分別位於y和y+ height

void drawOval(int x, int y, intwidth, int height)繪製橢圓的邊框。獲得一個圓或橢圓,它恰好能放人由x.y.width和height參數指定的矩形中。橢圓覆蓋區域的寬度爲width+1像素,高度爲height+1像素

void fillRect ( int x, int y, intwidth, int height)用當前顏色填充指定的矩形。該矩形左邊緣和右邊緣分別位於x和x+:width-1,上邊緣和下邊緣分別位於y和y+ height- 1

void fillOval ( int x, int y, intwidth, int height)用當前顏色填充外接指定矩形框的橢圓

void drawString ( String str, intx,int y)使用此圖形上下文的當前字體和顏色繪製指定的文本str.最左側字符左下角位於(x,y)座標

注意:在組件第一次顯示時,AWT線程都會自動去調用組性的paint(Graphics g方法,爲該方法傳人一個Graphics類型的對象用於繪製圖形,所以,要想在組件中繪製圖形,就須要重寫它的paint()方法。

Swing

相對於AWT來講,Swing包中提供了更加豐富、便捷、強大的GUI組件,並且這些組件都是Java語言編寫而成的,所以,Swing組件不依賴於本地平臺,能夠真正作到跨平臺運行。一般來說,咱們把依賴於本地平臺的AWT組件稱大重級組件,而把不依賴本地平臺的Swing組件稱爲輕量級組件。學習Swing組件的過程和學習AWT差很少,大部分的Swing組件都是JComponent類的直接或者間接子類,而JComponent類是AWT中java. awt. Container 的子類,說明Swing組件和AWT組件在繼承樹上造成了必定的關係

JFrame:

在swing組件中,常見的一個就是JFrame,它和Frame同樣是一個獨立存在的頂級窗口,不能放置在其餘容器之中。JFrame 類和Frame類最大的區別JFrame類是提供了關閉窗口的功能,在程序中不須要添加窗體監聽器,只需調用stDefaultCloseOperation()方法,而後將常量JFrame.EIXT_ON_CLOSE 做爲參數傳人便可,該參數表示點擊窗口關閉我和時退出程序。

JDialog:

JDialog是Swing的另一個真級窗口,它和Dialog同樣都表示對話框。JDialog 對話框可分爲兩種:模態對話框和非模態對話框。所謂模態對話框是指用戶須要等處處理完對話框後過能繼續與其餘窗口交萬而非模態對話框容許用戶在處理對話框的同時與其餘窗口交互。對話框是模態或者非模態,能夠在建立Dialog 對象時爲構造方法傳人蔘數來設置,也能夠在建立JDialog對象後調用它的setModal()方法米進行設置

  JDialog 構造方法

    JDialog( Frame owner)功能描述,構造方法,用來建立一個非模態的對話框,owner爲對話框全部者(頂級窗口JFrame)

    JDialog(Frame owner, String title)  構造方法建立一個具備指定標題的非模態對話框
    JDialog( Frame owner, boolean modal)建立個有指定模式的無標題對話框

注意:

列舉了JDialog三個經常使用的構造方法,在這三個構造方法中都須要接收一個Frame類型的對象,表示對話框全部者,若是該對話框沒有全部者,參數owner能夠傳人null,第三個構造方法中,參數modal用來指定JDialog窗口是模態仍是非模態,若是modal值設置爲true, 對話框就是模態對話框,反之則是非模態對話框,若是不設置modal的值,其默認值爲false,也就是非模態對話框。

中間容器:

 Swing組件中不只具備JFrame和JDialog這樣的頂級窗口,還提供了一些中間容器,這些容器不能單獨存在只能放置在頂級窗口中。其中最多見的中間容器有兩種:JPanel和JScrollPane,接下來分別來介紹這兩種容器。

①JPanel: JPanel和AWT中的Panel組件使用方法基本一致,它是一個無邊框,不能被移動、放大、縮小或者關閉的面板,它的默認佈局管理器是FlowLayout。固然也可使用JPanel帶參數的構造函數JPanel( LayoutManager layout)或者它的setLayout()方法爲其制定佈局管理器。
②JscrollPane:與JPanel不一樣的是,JScrolPane是- -個帶有滾動條的面板容器,並且這個面板兵能添加一個組件,若是想往JScrollPane面板中添加多個組件,應該先將組件添加到JPanel中,而後將JPanel添加到JScrollPane中。

  構造方法:    

JScrollPane( )建立一個空的JScrllPane面板
JScrollPane(Component view)建立個顯示指定組件的JScolPane面板,只要組件的內容超過視圖大小就會顯示水平和垂直滾動條

JScrollPane ( Component view,int vsbPolicy,int hsbPolicy)建立一個顯示指定容器、並具備指定滾動條策略的JSrollPane.參數vsbPolicy和hsbPolicy分別表示垂直滾動條策略和水平滾動條策略,應指定爲ScrollPaneConstants的靜態常量,

以下所示:

 HORIZONTAL SCROLLBAR AS_ NEEDED:表示水平滾動條只在須要時顯示,是默認策略。

HORIZONTAL SCROLLBAR NEVER:表示水平滾動條永遠不顯示

    HORIZONTAL SCROLLBAR ALWAYS:表示水平滾動條一直顯示

文本組件: 

  一、JTextField:稱爲文本框,它只能接收單行文本的輸入

    構造方法:

      JTextField()建立個空的文本框 ,初始字 符串爲null

      JTextFiled(int columns)建立一個具備指定列數的文本框,初始字符串爲null

      JTextField( String text)建立一個顯示指定初始字符串的文本框

      JTextField String text , int column)建立一個具備指定列數並顯示指定初始字符串的文本框

    JTextField 有一個子類JPaswordText,它表示一密碼框,只能接收用戶的單行輸人,可是在此框中不顯示用戶輸人的真實信息,而是經過顯示指定的回顯字符做爲佔位符。新建立的密碼框默認的回顯字符爲*。JPasswordText和JTextField的構造方法類似。

  二、JTextArea: JTextArea稱爲文本域,它能接收多行文本的輸人,使用JTextArea構造方法建立對象時能夠設定區域的行數

    構造方法:    

TextArea()功能說明建立一個空的文本域
JTextArea(String text)建立顯示指定初始字符串的文本域
JTextArea(int rows,int columns)建立具備指定行和列的空的文本域

JTextArea(String text,int rows, int columns)建立顯示指定初始文本並指定了行列的文本域

   三、菜單組件:在GUI程序中,菜單是很常見的組件,利用Swing提供的菜單組件能夠建立出多種樣式的菜單。

         在GUI程序中,建立下拉式菜單須要使用三個組件: MenuBar(菜單欄)、JMenu(菜單)和JMenultem(菜單項),
 ①JMenuBar. JMenuBar表示一個水平 的菜單欄,它用來管理菜單,不參與同用戶的交互式操做。菜單欄能夠放在容器的任何位置但一般狀況下會使用頂級窗口(如JFrame JDialog)的setJMenuBar(JMenuBar menuBar) 方法將它放置在頂級窗口的頂部。JMenuBar有一個無參構造函數,建立菜單欄時,只須要使用new關鍵字建立JMenubar對象便可。建立完菜單欄對象後,能夠調用它的add(JMenuc)方法爲其添加JMenu菜單。

②JMenu。JMenu表示一個菜單,它用來整合管理菜單項。菜單能夠是單-層次的結構,也能夠是多層次的結構。大多狀況下.使用JMenu(String text)構造麗數建立JMenu菜單,參數text表示菜單上的文本。

  經常使用方法:

woid JMenultem add(JMenultem menuItem)將菜單項添加到菜單末尾,返回此菜單項
void addSeparator( )分隔符添加到菜單的末尾

JMenultem getItem(int pos)返回指定索引處的菜單項,第一:個菜單項的索引爲0
int getItemCount()返回菜單上的項數,菜單項和分隔符都計算在內

void JMenultem insert(JMenultem menuItem,int pos)在指定索引處插人菜單項

void insertSeparator(int pos)在指定索引處雨人分隔符

void remove(int pos)從菜單中移除指定索引處的菜單項
void remove(JMenultem menutem)從菜單中移除指定的菜單項

void removeAll()從菜單中移除全部的菜單項

③JMenultem。JMenultem 表示一個菜單項,它是菜單系統中最基本的組件。和JMenu菜單同樣,在建立JMenultem菜單項時,一般會使用JMenumItem( String text)這個構造方法爲菜單項指定文本內容。

  JMenultem繼承自AbstractButton類的,所以能夠把它當作是一個按鈕,若是使用無參的構造方法建立了一個菜單項,則能夠調用從AbstractButton類中繼承的setText(String text)方法和setIcon( )方法爲其設置文本和圖標。

彈出式菜單:

  對於彈出式菜單,相信你們也不會陌生,在Windows桌面點擊鼠標右鍵會出現一個菜單,那就是彈出式菜單。在Java的Swing組件中.彈出式菜單用PopupMenu表示

    PopupMenu彈出式菜單和下拉式菜單-樣都經過調用addO)方法添加JMenultem菜單項,但它默認是不可見的,若是想要顯示出來,則必須調用它的show (Component

    invoker,int x.int y)方法該方法中參數invoker表示JPopupMenu菜單顯示位置的參考疑物組件,x和y表示invoker組件座標空間中的一個座標,顯示的是JPopupMenu菜單的左上角座標。
相關文章
相關標籤/搜索