Java知多少(80)圖形介面設計基礎

來源:互聯網
上載者:User

標籤:

早先程式使用最簡單的輸入輸出方式,使用者在鍵盤輸入資料,程式將資訊輸出在螢幕上。現代程式要求使用圖形化使用者介面(Graphical User Interface,GUI),介面中有菜單、按鈕等,使用者通過滑鼠選擇菜單中的選項和點擊按鈕,命令程式功能模組。本章學習如何用Java語言編寫GUI科學實驗,如何通過GUI實現輸入和輸出。

AWT和Swing

先前用Java編寫GUI程式,是使用抽象視窗工具包AWT(Abstract Window Toolkit).現在多用Swing。Swing可以看作是AWT的改良版,而不是代替AWT,是對AWT的提高和擴充。所以,在寫GUI程式時,Swing和AWT都要作用。它們共存於Java基礎類(Java Foundation Class,JFC)中。

儘管AWT和Swing都提供了構造圖形介面元素的類,但它們的重要方面有所不同:AWT依賴於主平台繪製使用者介面組件;而Swing有自己的機制,在主平台提供的視窗中繪製和管理介面組件。Swing與AWT之間的最明顯的區別是介面組件的外觀,AWT在不同平台上運行相同的程式,介面的外觀和風格可能會有一些差異。然而,一個基於Swing的應用程式可能在任何平台上都會有相同的外觀和風格。

Swing中的類是從AWT繼承的,有些Swing類直接擴充AWT中對應的類。例如,JApplet、JDialog、JFrame和JWindow。

使用Swing設計圖形介面,主要引入兩個包:

  • javax.swing包:包含Swing的基本類;
  • java.awt.event包:包含與處理事件相關的介面和類。


由於Swing太豐富,不可能在一本教科書中給出Swing的全面介紹,但本章所介紹的有關Swing的知識,已足以讓讀者編寫相當精美的GUI程式。

組件和容器

組件(component)是圖形介面的基本元素,使用者可以直接操作,例如按鈕。容器(Container)是圖形介面的的複合元素,容器可以包含組件,例如面板。

Java語言為每種組件都預定義類,程式通過它們或它們的子類各種組件對象,如,Swing中預定義的按鈕類JButton是一種類,程式建立的JButton對象,或JButton子類的對象就是按鈕。Java語言也為每種容器預定義類,程式通過它們或它們的子類建立各種容器物件。例如,Swing中預定義的視窗類別JFrame是一種容器類,程式建立的JFrame或JFrame子類的對象就是視窗。

為了統一管理組件和容器,為所有組件類定義超類,把組件的共有操作都定義在Component類中。同樣,為所有容器類定義超類Container類,把容器的共有操作都定義在Container類中。例如,Container類中定義了add()方法,大多數容器都可以用add()方法向容器添加組件。

Component、Container和Graphics類是AWT庫中的關鍵類。為能層次地構造複雜的圖形介面,容器被當作特殊的組件,可以把容器放入另一個容器中。例如,把若干按鈕和文字框分放在兩個面板中,再把這兩個面板和另一些按鈕放入視窗中。這種層次地構造介面的方法,能以增量的方式構造複雜的使用者介面。

事件驅動程式設計基礎

1.事件、監視器和監視器註冊
圖形介面上的事件是指在某個組件上發生使用者操作。例如,使用者單擊了介面上的某個按鈕,就說在這個按鈕上發生了事件,這個按鈕對象就是事件的擊發者。對事件作監視的對象稱為監視器,監視器提供響應事件的處理方法。為了讓監視器與事件對象關聯起來,需要對事件對象作監視器註冊,告訴系統事件對象的監視器。

以程式響應按鈕事件為例,程式要建立按鈕對象,把它添加到介面中,要為按鈕作監視器註冊,程式要有響應按鈕事件的方法。當“單擊按鈕”事件發生時,系統就調用已為這個按鈕註冊的事件處理方法,完成處理按鈕事件的工作。

2.實現事件處理的途征
java語言編寫事件處理常式主要有兩種方案:一個是程式重設handleEvent(Eventevt),採用這個方案的程式工作量稍大一些;另一個方案是程式實現一些系統設定的介面。java按事件類型提供多種介面,作為監視器對象的類需要實現相應的介面,即實現響應事件的方法。當事件發生時,系統內設的handleEvent(Event evt)方法就自動調用監視器的類實現的響應事件的方法。

java.awt.event包中用來檢測並對事件做出反應的模型包括以下三個組成元素:

  • 來源物件:事件“發生”這個組件上,它與一組“偵聽”該事件的對象保持著聯絡。
  • 監視器對象:一個實現預定義的介面的類的一個對象,該對象的類要提供對發生的事件作處理的方法。
  • 事件對象:它包含描述當事件發生時從源傳遞給監視器的特定事件的資訊。


一個事件驅動程式要做的工作除建立來源物件和監視器對象之外,還必須安排監視器瞭解來源物件,或向來源物件註冊監視器。每個來源物件有一個登入的監視器列表,提供一個方法能向該列表添加監視器對象。只有在來源物件註冊了監視器之後,系統才會將來源物件上發生的事件通知監視器對象。

3.事件類型和監視器介面
在java語言中,為了便於系統管理事件,也為了便於程式作監視器註冊,系統將事件分類,稱為事件類型。系統為每個事件類型提供一個介面。要作為監視器對象的類必須實現相應的介面,提供介面規定的響應事件的方法。

再以程式響應按鈕事件為例,JButton類對象button可以是一個事件的激發者。當使用者點擊介面中與button對應的按鈕時,button對象就會產生一個ActionEvent類型的事件。如果監視器對象是obj,對象obj的類是Obj,則類Obj必須實現AWT中的ActionListener介面,實現監視按鈕事件的actionPerformed方法。button對象必須用addActionListener方法註冊它的監視器obj。

程式運行時,當使用者點擊button對象對應的按鈕時,系統就將一個ActionEvent對象從事件激發對象傳遞到監視器。ActionEvent對象包含的資訊包括事件發生在哪一個按鈕,以及有關該事件的其他資訊。

表 11-1 給出有一定代表性的事件類型和產生這些事件的部分Swing組件。實際事件發生時,通常會產生一系列的事件,例如,使用者點擊按鈕,會產生ChangeEvent事件提示游標到了按鈕上,接著又是一個ChangeEvent事件表示滑鼠被按下,然後是ActionEvent事件表示滑鼠已鬆開,但游標依舊在按鈕上,最後是ChangeEvent事件,表示游標已離開按鈕。但是應用程式通常只處理按下按鈕的完整動作的單個ActionEvent事件。

表 11-1  組件和事件類型
事件類型 組件 描述
ActionEvent JButton,JCheckBox
JComboBox,JMenuItem
JRadioButton
點擊、選項或選擇
ChangeEvent JSlider 調整一個可移動元素的位置
AdjustmentEvent JScrollBar 調整滑塊位置
ItemEvent JComboBox,JCheckBox
JRadioButton
JRadioButtonMenuItem
JCheckBoxMenuItem
從一組可選方案中選擇一個項
ListSelectionEvent JList 選項事件
KeyEvent
MouseEvent
JComponent 及其衍生類別 操縱滑鼠或鍵盤
CareEvent JTextArea,JTextField 選擇和編輯文本
WindowEvent Window 及其衍生類別 JFrame 對視窗開啟、關閉和表徵圖化

每個事件類型都有一個相應的監視器介面,表11-2列出了每個介面的方法。實現監視器介面的類必須實現所有定義在介面中的方法。

 

表 11-2 監視器介面方法
監視器介面 方法 擷取事件來源的方法
ActionListener actionPerformed getSource,getActionCommand
ChangeListener stateChanged getSource
AdjustmentListener adjustmentValueChanged getAdjustable
FocusListener focusGained,
focusLost
 
ItemListener itemStateChanged getItemSelectable(),getSource()
ListSelectionListener valueChanged e.getSource().getSelectedValue()
KeyListener keyPressed,
keyReleased,
keyTyped
 
CareListener careUpdate  
MouseListener mouseClicked,
mouseEntered,
mouseExited,
mousePressed,
mouseReleased
 
MouseMontionListener mouseDragged,
mouseMoved
 
WindowListener windowClosed,
windowClosing,
windowDeactivated,
windowDeiconified,
windowIconified,
windowOpened
 

系列文章:

Java知多少(上)Java知多少(中)Java知多少(78)Java向量(Vector)及其應用Java知多少(79)雜湊表及其應用

Java知多少(80)圖形介面設計基礎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.