第9章 Java圖形用戶(hù)界面_第1頁(yè)
第9章 Java圖形用戶(hù)界面_第2頁(yè)
第9章 Java圖形用戶(hù)界面_第3頁(yè)
第9章 Java圖形用戶(hù)界面_第4頁(yè)
第9章 Java圖形用戶(hù)界面_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Java語(yǔ)言概述及編程基礎(chǔ)Java實(shí)用編程技術(shù)圖形用戶(hù)界面或圖形用戶(hù)接口(GraphicalUserInterface,GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作環(huán)境用戶(hù)接口Java提供了一系列的用戶(hù)界面組件,這些組件主要包含在兩個(gè)包中,一個(gè)是抽象窗口工具包(AWT),包名為java.awt;另一個(gè)是Swing包,包名為java.swingJava中,圖形用戶(hù)界面由組件、布局管理和事件委托處理三部分組成圖形用戶(hù)界面Java實(shí)用編程技術(shù)組件是響應(yīng)用戶(hù)操作的可視圖形控件,它們置于容器組件中形成一個(gè)具有包含關(guān)系的層次結(jié)構(gòu),由布局管理器安排組件在容器中的位置能夠產(chǎn)生事件的組件稱(chēng)事件源,不同的組件產(chǎn)生不同類(lèi)型的事件,同一組件產(chǎn)可能產(chǎn)生多種事件能夠產(chǎn)生事件的組件稱(chēng)事件源,不同的組件產(chǎn)生不同類(lèi)型的事件,同一組件產(chǎn)可能產(chǎn)生多種事件圖形用戶(hù)界面Java實(shí)用編程技術(shù)創(chuàng)建一個(gè)圖形用戶(hù)界面的方法如下:(1)創(chuàng)建一個(gè)頂級(jí)的容器組件,一般是繼承框架(Frame)的應(yīng)用程序主窗口,它包含板框、標(biāo)題欄、控制菜單和內(nèi)容面板(Contentpane)的容器(2)按指定的布局管理器向容器中添加組件,給事件源組件添加事件監(jiān)視器,注冊(cè)事件處理(3)設(shè)計(jì)事件處理程序,重新處理方法(4)顯示圖形用戶(hù)界面圖形用戶(hù)界面Java實(shí)用編程技術(shù)組件是抽象的概念,通俗的說(shuō)是一些符合某種規(guī)范的類(lèi)或代碼組合在一起就構(gòu)成了組件,對(duì)外提供多個(gè)接口或方法供調(diào)用,從而完成某些特定的功能Java中所有的UI組件都是以Component類(lèi)為根Swing是AWT的擴(kuò)展,它提供了更強(qiáng)大和更靈活的組件集合與AWT組件不同,Swing組件實(shí)現(xiàn)不包括任何與平臺(tái)相關(guān)的代碼組件Java實(shí)用編程技術(shù)在javax.swing包中,定義了兩種類(lèi)型的組件:頂層容器(JFrame,JApplet,JDialog和JWindow)和輕量級(jí)組件Swing組件都是AWT的Container類(lèi)的直接子類(lèi)和間接子類(lèi)

java.awt.Component

-java.awt.Container

-java.awt.Window

-java.awt.Frame-javax.swing.JFrame

-javax.Dialog-javax.swing.JDialog

-javax.swing.JWindow

-java.awt.Applet-javax.swing.JApplet

-javax.swing.Box

-javax.swing.Jcomponet組件Java實(shí)用編程技術(shù)importjava.awt.*;importjavax.swing.*;classTestextendsJFrame{ publicFirstFrame(Stringtitle) { super(title); this.setSize(400,300); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }}publicclassMainApp{ publicstaticvoidmain(String[]args) { newTest("GUI演示"); }}

組件Java實(shí)用編程技術(shù)三種文本組件JLable、JTextField、JTextAreaJlableJTextField這個(gè)組件與下一個(gè)JTextArea組件都比較復(fù)雜。這個(gè)組件是文本框,只能輸入單行的文本。當(dāng)文本區(qū)域的大小超出了可顯示的范圍時(shí),在默認(rèn)情況下,不會(huì)自動(dòng)出現(xiàn)滾動(dòng)條JTextArea這個(gè)組件是文本區(qū)域,可以輸入多行文本。當(dāng)文本的區(qū)域超出的可顯示的范圍時(shí),在默認(rèn)情況下,不會(huì)自動(dòng)出現(xiàn)滾動(dòng)條文本組件Java實(shí)用編程技術(shù)按鈕組件是以AbtractButton為父類(lèi)當(dāng)在這些組件上單擊鼠標(biāo)或在這些組件獲得焦點(diǎn)時(shí)按回車(chē)鍵時(shí),都會(huì)產(chǎn)生ActionEvent事件對(duì)象JButton()JCheckBox和JRadioButton這兩個(gè)組件對(duì)象都有一個(gè)是否被選中的狀態(tài)。我們通常是利用狀態(tài)變化時(shí),它們會(huì)產(chǎn)生ItemEvent事件的特點(diǎn)來(lái)幫助達(dá)到目的的。而ItemEvent事件對(duì)象可以被ItemListener監(jiān)聽(tīng)器對(duì)象接受到,前提條件就是將監(jiān)聽(tīng)器對(duì)象向事件源對(duì)象注冊(cè)按鈕組件Java實(shí)用編程技術(shù)JComboBox組合框,它是由下拉列表與文本框組成。我們可以通過(guò)setEnable方法來(lái)設(shè)置該組合框?qū)ο竽芊癖痪庉?;通過(guò)addItem方法向該組合框?qū)ο笤黾禹?xiàng)目;通過(guò)方法getSelectedIndex獲得選擇到的項(xiàng)目的索引號(hào);通過(guò)方法getSelectedItem獲得選擇到的項(xiàng)目;也可以在獲得項(xiàng)目索引的前提下,通過(guò)getItemAt方法獲得選擇到的項(xiàng)目列表組件Java實(shí)用編程技術(shù)Jlist這個(gè)列表框組件比較復(fù)雜。它可以多選也可以單選,這可以通過(guò)setSelectionMode方法來(lái)實(shí)現(xiàn),該方法的參數(shù)有效值為:ListSelectionModel.SINGLE_SELECTION:只能一次選擇一個(gè)項(xiàng)目。ListSelectionModel.SINGLE_INTERVAL_SELECTION:一次可以只選擇一個(gè)項(xiàng)目也可以一次同時(shí)選擇連續(xù)的多個(gè)項(xiàng)目列表組件Java實(shí)用編程技術(shù)JFrame類(lèi)JFrame是在Swing中經(jīng)常使用到的組件,是最底層的容器,可以稱(chēng)之為“窗口”。JFrame窗口允許指定關(guān)閉窗口的默認(rèn)模式。JFrame對(duì)象的布局管理器默認(rèn)為邊界布局管理器JPanel類(lèi)面板也是java中常用到的容器之一,JPanel除了可以讓組件加入外,還可以將JPane作為組件加入到JFrame中去。JPanel中不僅可以添加組件,還可以添加其它面板。JPanel默認(rèn)使用流式布局管理器窗口及面板組件Java實(shí)用編程技術(shù)創(chuàng)建一個(gè)能夠顯示標(biāo)題和內(nèi)容的界面。標(biāo)簽JLabel用來(lái)顯示標(biāo)題,而JTextField文本框用來(lái)顯示內(nèi)容運(yùn)行程序的結(jié)果見(jiàn)圖具體程序代碼見(jiàn)課本相應(yīng)章節(jié)實(shí)例Java實(shí)用編程技術(shù)在Swing組件的GUI應(yīng)用程序中,作為框架用的有四個(gè)重量級(jí)組件,它們分別是JFrame、JApplet、JWindow、Jdialog當(dāng)一個(gè)組件加入一個(gè)容器時(shí),組件可以向與該容器相關(guān)的布局管理器對(duì)象提供自己希望的尺寸和排列方式對(duì)于四個(gè)框架組件來(lái)說(shuō),其中包含容器的默認(rèn)布局管理器是BorderLayout;對(duì)于JPanel容器來(lái)說(shuō),其默認(rèn)的布局管理器是FlowLayout簡(jiǎn)介Java實(shí)用編程技術(shù)采用從左向右、從上向下的順序來(lái)排列其中的組件,如果一行已滿(mǎn),則開(kāi)始下一行。在默認(rèn)的情況下,采用居中對(duì)齊的方式來(lái)排列組件,組件間的間隔為5個(gè)象素FlowLayout共定義了5個(gè)常量用來(lái)指明組件對(duì)齊方式FlowLayout.LEADING:與開(kāi)始一邊對(duì)齊FlowLayout.TRAILING:與結(jié)束一邊對(duì)齊FlowLayout.CENTER:居中對(duì)齊FlowLayout.LEFT:左對(duì)齊FlowLayout.RIGHT:右對(duì)齊FlowLayout順序布局Java實(shí)用編程技術(shù)這是一個(gè)區(qū)域布局。它將整個(gè)容器分為東西南北中五個(gè)區(qū)域,每個(gè)區(qū)域加入一個(gè)組件,如果在同一個(gè)區(qū)域加入二個(gè)或二個(gè)以上的組件時(shí),最后加入的組件將覆蓋前面加入的組件。在加入組件時(shí),需要指明將要加入到的區(qū)域一個(gè)BorderLayout有5個(gè)區(qū)域PAGE_START;PAGE_END;LINE_START;LINE_END;CENTER;BorderLayout邊框布局Java實(shí)用編程技術(shù)這是一個(gè)網(wǎng)格布局。它將整個(gè)容器分為n行m列共n×m個(gè)大小相同的小格。在默認(rèn)的情況下,小格之間的間隔為0。每一個(gè)小格可以放置一個(gè)組件可以通過(guò)構(gòu)造方法來(lái)設(shè)置小格的數(shù)量和小格之間的空隙GridLayout的布局方式將容器按用戶(hù)的設(shè)置平均劃分成若干個(gè)網(wǎng)格,其中的每一格稱(chēng)為一個(gè)“單元格”GridLayout布局管理器默認(rèn)組件的水平間距和垂直間距均為0像素,可以通過(guò)GridLayout類(lèi)的方法setHgap(inthgap)和setVgap(intvgap)設(shè)置組件的水平間距和垂直間距GridLayout網(wǎng)格布局Java實(shí)用編程技術(shù)該實(shí)例演示了一個(gè)圖形界面的實(shí)現(xiàn),有窗口、標(biāo)簽、按鈕、輸入文本框等組件,同時(shí)規(guī)定了這些組件的布局應(yīng)用程序的運(yùn)行結(jié)果具體程序代碼見(jiàn)課本相應(yīng)章節(jié)應(yīng)用布局管理器的實(shí)例Java實(shí)用編程技術(shù)Java中處理事件的方法是基于授權(quán)事件模型的,這種模型定義了標(biāo)準(zhǔn)一致的機(jī)制去產(chǎn)生和處理事件。它的概念十分簡(jiǎn)單:一個(gè)源產(chǎn)生一個(gè)事件并把它送到一個(gè)或多個(gè)的監(jiān)聽(tīng)器那里在授權(quán)事件模型中,監(jiān)聽(tīng)器為了接受一個(gè)事件通知必須注冊(cè)事件是指在授權(quán)事件模型中,一個(gè)事件是一個(gè)描述了事件源的狀態(tài)改變的對(duì)象。事件處理機(jī)制Java實(shí)用編程技術(shù)事件源是一個(gè)產(chǎn)生事件的對(duì)象。當(dāng)這個(gè)對(duì)象內(nèi)部的狀態(tài)以某種方式改變時(shí),事件就會(huì)產(chǎn)生一些事件源可能只允許注冊(cè)一個(gè)監(jiān)聽(tīng)器。一個(gè)事件源必須也提供一個(gè)允許監(jiān)聽(tīng)器注銷(xiāo)一個(gè)特定事件的方法事件監(jiān)聽(tīng)器是一個(gè)事件監(jiān)聽(tīng)器是一個(gè)在事件發(fā)生時(shí)被通知的對(duì)象。它有兩個(gè)要求。首先,為了可以接受到特殊類(lèi)型事件的通知它必須在事件源中已經(jīng)被注冊(cè)。第二,它必須實(shí)現(xiàn)接受和處理通知的方法事件處理機(jī)制Java實(shí)用編程技術(shù)Java事件處理機(jī)制的核心是這些代表事件的類(lèi)。事件類(lèi)提供一個(gè)一致而又易用的封裝事件的方法在java.util中被封裝的EventObject類(lèi)是Java事件類(lèi)層次結(jié)構(gòu)的根節(jié)點(diǎn)。它是所有事件類(lèi)的父類(lèi)在java.awt包中被定義的AWTEvent類(lèi)是EventObject類(lèi)的子類(lèi)。同時(shí)作為所有基于awt的事件的父類(lèi)(不論直接還是間接),它在授權(quán)事件模型中被使用java.awt.event包定義了一些能被各種用戶(hù)接口單元產(chǎn)生的事件類(lèi)型事件類(lèi)Java實(shí)用編程技術(shù)事件類(lèi)描述ActionEvent通常在按下一個(gè)按鈕,雙擊一個(gè)列表項(xiàng)或者選中一個(gè)菜單項(xiàng)時(shí)發(fā)生AdjustmentEvent當(dāng)操作一個(gè)滾動(dòng)條時(shí)發(fā)生ComponentEvent當(dāng)一個(gè)組件隱藏,移動(dòng),改變大小或成為可見(jiàn)時(shí)發(fā)生ContainerEvent當(dāng)一個(gè)組件從容器中加入或刪除時(shí)發(fā)生FocusEvent當(dāng)一個(gè)組件獲得或失去鍵盤(pán)焦點(diǎn)時(shí)發(fā)生InputEvent所有組件的輸入事件的抽象超類(lèi)ItemEvent當(dāng)一個(gè)復(fù)選框或列表項(xiàng)被點(diǎn)擊時(shí)發(fā)生;當(dāng)一個(gè)選擇框或一個(gè)可選擇菜單的項(xiàng)被選擇或取消時(shí)發(fā)生事件類(lèi)Java實(shí)用編程技術(shù)事件類(lèi)描述KeyEvent當(dāng)輸入從鍵盤(pán)獲得時(shí)發(fā)生MouseEvent當(dāng)鼠標(biāo)被拖動(dòng),移動(dòng),點(diǎn)擊,按下,釋放時(shí)發(fā)生;或者在鼠標(biāo)進(jìn)入或退出一個(gè)組件時(shí)發(fā)生TextEvent當(dāng)文本區(qū)和文本域的文本改變時(shí)發(fā)生WindowEvent當(dāng)一個(gè)窗口激活,關(guān)閉,失效,恢復(fù),最小化,打開(kāi)或退出時(shí)發(fā)生事件類(lèi)Java實(shí)用編程技術(shù)事件源描述Button在按鈕被按下時(shí)產(chǎn)生動(dòng)作事件Checkbox在復(fù)選框被選中或取消時(shí)產(chǎn)生項(xiàng)目事件Choice在選擇項(xiàng)改變時(shí)產(chǎn)生項(xiàng)目事件List在一項(xiàng)被雙擊時(shí),產(chǎn)生動(dòng)作事件,被選擇或取消時(shí)產(chǎn)生項(xiàng)目事件Menuitem菜單項(xiàng)被選中時(shí)產(chǎn)生動(dòng)作事件,當(dāng)可復(fù)選菜單項(xiàng)被選中或取消時(shí)產(chǎn)生項(xiàng)目事件Scrollba在滾動(dòng)條被拖動(dòng)時(shí)產(chǎn)生調(diào)整事件Textcomponents當(dāng)用戶(hù)輸入字符時(shí)產(chǎn)生文本事件Window窗口被激活,關(guān)閉,失效,恢復(fù),最小化,打開(kāi)或退出時(shí)產(chǎn)生窗口事件事件源Java實(shí)用編程技術(shù)接口描述ActionListener定義了一個(gè)接受動(dòng)作事件的方法AdjustmentListener定義了一個(gè)接受調(diào)整事件的方法ComponentListener定義了四個(gè)方法來(lái)識(shí)別何時(shí)隱藏、移動(dòng)、改變大小、顯示組件ContainerListener定義了兩個(gè)方法來(lái)識(shí)別何時(shí)從容器中加入或除去組件FocusListener定義了兩個(gè)方法來(lái)識(shí)別何時(shí)組件獲得或失去焦點(diǎn)ItemListener定義了一個(gè)方法來(lái)識(shí)別何時(shí)項(xiàng)目狀態(tài)改變KeyListener定義了三個(gè)方法來(lái)識(shí)別何時(shí)鍵按下、釋放和鍵入字符事件監(jiān)聽(tīng)器Java實(shí)用編程技術(shù)接口描述MouseListener定義了五個(gè)方法來(lái)識(shí)別何時(shí)鼠標(biāo)單擊,進(jìn)入組件,離開(kāi)組件,按下和釋放事件MouseMotionListener定義了兩個(gè)方法來(lái)識(shí)別何時(shí)鼠標(biāo)拖動(dòng)和移動(dòng)TextListener定義了一個(gè)方法來(lái)識(shí)別何時(shí)文本值改變WindowListener定義了七個(gè)方法來(lái)識(shí)別何時(shí)窗口激活、關(guān)閉、失效、最小化、還原、打開(kāi)和退出監(jiān)聽(tīng)器Java實(shí)用編程技術(shù)利用授權(quán)事件模型來(lái)編寫(xiě)簡(jiǎn)單的GUI應(yīng)用程序。只需要如下所示兩步:(1)在監(jiān)聽(tīng)器中實(shí)現(xiàn)相應(yīng)的監(jiān)聽(tīng)器接口,以便接受相應(yīng)的事件;(2)實(shí)現(xiàn)注冊(cè)或注銷(xiāo)(如果必要)監(jiān)聽(tīng)器的代碼,以便可以得到事件的通知一個(gè)事件源可能產(chǎn)生多種類(lèi)型的事件。每一個(gè)事件都必須分別注冊(cè)事件處理實(shí)現(xiàn)Java實(shí)用編程技術(shù)為了明白授權(quán)事件模型實(shí)際上是如何工作的,我們將分析一個(gè)例子,在這個(gè)例子中處理了兩個(gè)最常用的事件產(chǎn)生器:鼠標(biāo)和鍵盤(pán)程序概述:程序在窗體上顯示了鼠標(biāo)的當(dāng)前坐標(biāo)。每當(dāng)鼠標(biāo)按鈕被按下,在鼠標(biāo)指針?biāo)诘奈恢脤@示“按下”。而當(dāng)鼠標(biāo)按鈕釋放時(shí),將顯示“釋放”。如果鼠標(biāo)按鈕被點(diǎn)擊,將顯示“單擊”。當(dāng)鼠標(biāo)進(jìn)入或退出窗體時(shí),在窗體的顯示區(qū)域的左上角將顯示一個(gè)消息。當(dāng)你拖動(dòng)鼠標(biāo)時(shí),跟隨著被拖動(dòng)的鼠標(biāo)一個(gè)“*”字符將被顯示事件處理實(shí)現(xiàn)Java實(shí)用編程技術(shù)兩個(gè)變量:x和y,它們存放著在鼠標(biāo)的按下,釋放或拖動(dòng)事件發(fā)生時(shí)鼠標(biāo)的位置。坐標(biāo)將在paint()方法中被使用,以便在這些事件發(fā)生的點(diǎn)顯示輸出應(yīng)用程序的運(yùn)行結(jié)果具體程序見(jiàn)課本相應(yīng)章節(jié)事件處理實(shí)現(xiàn)Java實(shí)用編程技術(shù)程序說(shuō)明:MouseEventDemo類(lèi)擴(kuò)展JFrame類(lèi),同時(shí)實(shí)現(xiàn)了MouseListener接口和MouseMotionListener接口在構(gòu)造方法中,這個(gè)程序注冊(cè)自己為鼠標(biāo)事件的監(jiān)聽(tīng)器。這些是通過(guò)調(diào)用addMouseListener()方法和addMouseMotionListener()方法來(lái)實(shí)現(xiàn)的,它們是類(lèi)的成員方法程序?qū)崿F(xiàn)了在MouseListener接口和MouseMotionListener接口中定義的所有方法,以便對(duì)這些鼠標(biāo)事件進(jìn)行處理事件處理實(shí)現(xiàn)Java實(shí)用編程技術(shù)我們可以采用與在前面鼠標(biāo)事件范例相同的結(jié)構(gòu)去處理鍵盤(pán)事件。當(dāng)然,必須實(shí)現(xiàn)相應(yīng)的KeyListener接口每次用戶(hù)按下一個(gè)鍵時(shí),通常有兩個(gè)或三個(gè)事件被產(chǎn)生在程序處理鍵盤(pán)事件之前,必須要獲得輸入焦點(diǎn)。通過(guò)調(diào)用

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論