国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

Java編程中應(yīng)用的GUI設(shè)計(jì)基礎(chǔ)

2019-11-26 14:56:48
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

早先程序使用最簡(jiǎn)單的輸入輸出方式,用戶(hù)在鍵盤(pán)輸入數(shù)據(jù),程序?qū)⑿畔⑤敵鲈谄聊簧稀,F(xiàn)代程序要求使用圖形用戶(hù)界面(Graphical User Interface,GUI),界面中有菜單、按鈕等,用戶(hù)通過(guò)鼠標(biāo)選擇菜單中的選項(xiàng)和點(diǎn)擊按鈕,命令程序功能模塊。本章學(xué)習(xí)如何用Java語(yǔ)言編寫(xiě)GUI科學(xué)試驗(yàn),如何通過(guò)GUI實(shí)現(xiàn)輸入和輸出。
AWT和Swing

先前用Java編寫(xiě)GUI程序,是使用抽象窗口工具包AWT(Abstract Window Toolkit).現(xiàn)在多用Swing。Swing可以看作是AWT的改良版,而不是代替AWT,是對(duì)AWT的提高和擴(kuò)展。所以,在寫(xiě)GUI程序時(shí),Swing和AWT都要作用。它們共存于Java基礎(chǔ)類(lèi)(Java Foundation Class,JFC)中。

盡管AWT和Swing都提供了構(gòu)造圖形界面元素的類(lèi),但它們的重要方面有所不同:AWT依賴(lài)于主平臺(tái)繪制用戶(hù)界面組件;而Swing有自己的機(jī)制,在主平臺(tái)提供的窗口中繪制和管理界面組件。Swing與AWT之間的最明顯的區(qū)別是界面組件的外觀(guān),AWT在不同平臺(tái)上運(yùn)行相同的程序,界面的外觀(guān)和風(fēng)格可能會(huì)有一些差異。然而,一個(gè)基于Swing的應(yīng)用程序可能在任何平臺(tái)上都會(huì)有相同的外觀(guān)和風(fēng)格。

Swing中的類(lèi)是從AWT繼承的,有些Swing類(lèi)直接擴(kuò)展AWT中對(duì)應(yīng)的類(lèi)。例如,JApplet、JDialog、JFrame和JWindow。

使用Swing設(shè)計(jì)圖形界面,主要引入兩個(gè)包:

  1. javax.swing包:包含Swing的基本類(lèi);
  2. java.awt.event包:包含與處理事件相關(guān)的接口和類(lèi)。

由于Swing太豐富,不可能在一本教科書(shū)中給出Swing的全面介紹,但本章所介紹的有關(guān)Swing的知識(shí),已足以讓讀者編寫(xiě)相當(dāng)精美的GUI程序。
組件和容器

組件(component)是圖形界面的基本元素,用戶(hù)可以直接操作,例如按鈕。容器(Container)是圖形界面的的復(fù)合元素,容器可以包含組件,例如面板。

Java語(yǔ)言為每種組件都預(yù)定義類(lèi),程序通過(guò)它們或它們的子類(lèi)各種組件對(duì)象,如,Swing中預(yù)定義的按鈕類(lèi)JButton是一種類(lèi),程序創(chuàng)建的JButton對(duì)象,或JButton子類(lèi)的對(duì)象就是按鈕。Java語(yǔ)言也為每種容器預(yù)定義類(lèi),程序通過(guò)它們或它們的子類(lèi)創(chuàng)建各種容器對(duì)象。例如,Swing中預(yù)定義的窗口類(lèi)JFrame是一種容器類(lèi),程序創(chuàng)建的JFrame或JFrame子類(lèi)的對(duì)象就是窗口。

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

Component、Container和Graphics類(lèi)是AWT庫(kù)中的關(guān)鍵類(lèi)。為能層次地構(gòu)造復(fù)雜的圖形界面,容器被當(dāng)作特殊的組件,可以把容器放入另一個(gè)容器中。例如,把若干按鈕和文本框分放在兩個(gè)面板中,再把這兩個(gè)面板和另一些按鈕放入窗口中。這種層次地構(gòu)造界面的方法,能以增量的方式構(gòu)造復(fù)雜的用戶(hù)界面。
事件驅(qū)動(dòng)程序設(shè)計(jì)基礎(chǔ)

1.事件、監(jiān)視器和監(jiān)視器注冊(cè)
圖形界面上的事件是指在某個(gè)組件上發(fā)生用戶(hù)操作。例如,用戶(hù)單擊了界面上的某個(gè)按鈕,就說(shuō)在這個(gè)按鈕上發(fā)生了事件,這個(gè)按鈕對(duì)象就是事件的擊發(fā)者。對(duì)事件作監(jiān)視的對(duì)象稱(chēng)為監(jiān)視器,監(jiān)視器提供響應(yīng)事件的處理方法。為了讓監(jiān)視器與事件對(duì)象關(guān)聯(lián)起來(lái),需要對(duì)事件對(duì)象作監(jiān)視器注冊(cè),告訴系統(tǒng)事件對(duì)象的監(jiān)視器。

以程序響應(yīng)按鈕事件為例,程序要?jiǎng)?chuàng)建按鈕對(duì)象,把它添加到界面中,要為按鈕作監(jiān)視器注冊(cè),程序要有響應(yīng)按鈕事件的方法。當(dāng)“單擊按鈕”事件發(fā)生時(shí),系統(tǒng)就調(diào)用已為這個(gè)按鈕注冊(cè)的事件處理方法,完成處理按鈕事件的工作。

2.實(shí)現(xiàn)事件處理的途征
java語(yǔ)言編寫(xiě)事件處理程序主要有兩種方案:一個(gè)是程序重設(shè)handleEvent(Eventevt),采用這個(gè)方案的程序工作量稍大一些;另一個(gè)方案是程序?qū)崿F(xiàn)一些系統(tǒng)設(shè)定的接口。java按事件類(lèi)型提供多種接口,作為監(jiān)視器對(duì)象的類(lèi)需要實(shí)現(xiàn)相應(yīng)的接口,即實(shí)現(xiàn)響應(yīng)事件的方法。當(dāng)事件發(fā)生時(shí),系統(tǒng)內(nèi)設(shè)的handleEvent(Event evt)方法就自動(dòng)調(diào)用監(jiān)視器的類(lèi)實(shí)現(xiàn)的響應(yīng)事件的方法。

java.awt.event包中用來(lái)檢測(cè)并對(duì)事件做出反應(yīng)的模型包括以下三個(gè)組成元素:
源對(duì)象:事件“發(fā)生”這個(gè)組件上,它與一組“偵聽(tīng)”該事件的對(duì)象保持著聯(lián)系。
監(jiān)視器對(duì)象:一個(gè)實(shí)現(xiàn)預(yù)定義的接口的類(lèi)的一個(gè)對(duì)象,該對(duì)象的類(lèi)要提供對(duì)發(fā)生的事件作處理的方法。
事件對(duì)象:它包含描述當(dāng)事件發(fā)生時(shí)從源傳遞給監(jiān)視器的特定事件的信息。

一個(gè)事件驅(qū)動(dòng)程序要做的工作除創(chuàng)建源對(duì)象和監(jiān)視器對(duì)象之外,還必須安排監(jiān)視器了解源對(duì)象,或向源對(duì)象注冊(cè)監(jiān)視器。每個(gè)源對(duì)象有一個(gè)已注冊(cè)的監(jiān)視器列表,提供一個(gè)方法能向該列表添加監(jiān)視器對(duì)象。只有在源對(duì)象注冊(cè)了監(jiān)視器之后,系統(tǒng)才會(huì)將源對(duì)象上發(fā)生的事件通知監(jiān)視器對(duì)象。

3.事件類(lèi)型和監(jiān)視器接口
在java語(yǔ)言中,為了便于系統(tǒng)管理事件,也為了便于程序作監(jiān)視器注冊(cè),系統(tǒng)將事件分類(lèi),稱(chēng)為事件類(lèi)型。系統(tǒng)為每個(gè)事件類(lèi)型提供一個(gè)接口。要作為監(jiān)視器對(duì)象的類(lèi)必須實(shí)現(xiàn)相應(yīng)的接口,提供接口規(guī)定的響應(yīng)事件的方法。

再以程序響應(yīng)按鈕事件為例,JButton類(lèi)對(duì)象button可以是一個(gè)事件的激發(fā)者。當(dāng)用戶(hù)點(diǎn)擊界面中與button對(duì)應(yīng)的按鈕時(shí),button對(duì)象就會(huì)產(chǎn)生一個(gè)ActionEvent類(lèi)型的事件。如果監(jiān)視器對(duì)象是obj,對(duì)象obj的類(lèi)是Obj,則類(lèi)Obj必須實(shí)現(xiàn)AWT中的ActionListener接口,實(shí)現(xiàn)監(jiān)視按鈕事件的actionPerformed方法。button對(duì)象必須用addActionListener方法注冊(cè)它的監(jiān)視器obj。

程序運(yùn)行時(shí),當(dāng)用戶(hù)點(diǎn)擊button對(duì)象對(duì)應(yīng)的按鈕時(shí),系統(tǒng)就將一個(gè)ActionEvent對(duì)象從事件激發(fā)對(duì)象傳遞到監(jiān)視器。ActionEvent對(duì)象包含的信息包括事件發(fā)生在哪一個(gè)按鈕,以及有關(guān)該事件的其他信息。

下表給出有一定代表性的事件類(lèi)型和產(chǎn)生這些事件的部分Swing組件。實(shí)際事件發(fā)生時(shí),通常會(huì)產(chǎn)生一系列的事件,例如,用戶(hù)點(diǎn)擊按鈕,會(huì)產(chǎn)生ChangeEvent事件提示光標(biāo)到了按鈕上,接著又是一個(gè)ChangeEvent事件表示鼠標(biāo)被按下,然后是ActionEvent事件表示鼠標(biāo)已松開(kāi),但光標(biāo)依舊在按鈕上,最后是ChangeEvent事件,表示光標(biāo)已離開(kāi)按鈕。但是應(yīng)用程序通常只處理按下按鈕的完整動(dòng)作的單個(gè)ActionEvent事件。

每個(gè)事件類(lèi)型都有一個(gè)相應(yīng)的監(jiān)視器接口,表11-2列出了每個(gè)接口的方法。實(shí)現(xiàn)監(jiān)視器接口的類(lèi)必須實(shí)現(xiàn)所有定義在接口中的方法。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 周宁县| 黄梅县| 青龙| 庆安县| 乌海市| 宣城市| 佛学| 栾川县| 泸西县| 时尚| 高淳县| 青海省| 龙里县| 大洼县| 商都县| 黑水县| 黔西县| 宁阳县| 双柏县| 利津县| 通许县| 麦盖提县| 商城县| 临泉县| 汾西县| 会泽县| 和平县| 忻州市| 运城市| 巴彦淖尔市| 平度市| 南京市| 忻城县| 凌源市| 铜山县| 金秀| 梁山县| 通道| 南江县| 永登县| 海盐县|