java入門第20章swing編程_第1頁
java入門第20章swing編程_第2頁
java入門第20章swing編程_第3頁
java入門第20章swing編程_第4頁
java入門第20章swing編程_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第20章JavaSwing編程JavaSwing是Java中圖形用戶界面技術。JavaSwing中包含豐富的圖形組件(既前面提到的菜單、按鈕等)。通過JavaSwing,我們可以編寫出豐富多彩的界面程序,可以讓用戶方便的與Java程序互動。本章中我們將學習JavaSwing的基礎知識。20.1JavaSwing編程簡介因為圖形用戶界面是一個全新的內(nèi)容,所以在本節(jié)中,將首先講述Java圖形用戶界面的概念。然后會介紹圖形編程的三大要素。用戶圖形編程與我們前面學習的程序有較大的不同,本節(jié)的另一個目的是讓讀者對用戶界面編程不覺得完全陌生。20.1.1圖形用戶界面編程簡介用戶圖形界面相信大家一定不會陌生,進入Windows操作系統(tǒng)之后,迎接我們的就是圖形用戶界面。圖形用戶界面是軟件通過操作相關硬件(如顯卡等),將圖形繪制在顯示器上的。在這個繪制過程中,操作系統(tǒng)提供了很多幫助。也就是說,我們看到的任何一個按鈕,任何一個菜單,任何一行字都是一個個像素繪制出來的。這里所說的軟件,指的是運行著操作系統(tǒng)上的所有軟件,當然也包括Java虛擬機以及所有Java程序。初學JavaSwing,可以從組件、布局管理器和事件處理三個方面來入手。下面分別就這三個方面來一一解釋。20.1.2組件(Component)首先是組件(Component)。什么是組件呢?在Swing中,組件就是一個擁有相對獨立功能的一個東西。例如窗口、對話框、按鈕、標簽和文本條等等這些都是組件。在Java中,一切皆是類,所以組件也是通過類來封裝起來的。Java類庫中為Swing提供了豐富的控件。20.1.3布局管理器(LayoutManager)組件有自己的樣子,但是把這些組件放在一起就需要處理組件與組件之間顯示的問題了——哪個組件應該在哪兒顯示,應該占用多大的空間。布局管理器就是供容器管理其中組件的大小和位置的。在圖20-1中,窗口使用的就是Swing中最簡單的一種布局管理器,它的作用就是按照組件的大小順序排列,一行排不開就排在下一行。20.1.4事件處理(EventHandling)每種組件都會定義自己的事件。這些事件一般是完成組件功能的核心。事件處理也可以認為是組件的使用,但是它又是相對獨立的,且比較重要,所以在本小節(jié)中單獨列出來講解。20.2Swing基本組件在上一節(jié)中我們已經(jīng)簡單介紹Swing組件的概念。在本節(jié)中我們將學習Swing中的基本組件。除了學會使用這些組件之外,本節(jié)中還將并進一步了解組件之間包含于被包含的關系。Swing組件的學習是一個循序漸進的過程??梢哉f,每個組件都有自己的“故事”,開始不要求多求快。20.2.1窗口(JFrame)Swing中,JFrame類代表窗口。它主要有以下幾個方法。setSize(intwidth,intheight):設置窗口的大小,單位是像素。setLocation(Pointlocation):設置窗口的左上角距離屏幕左上角的距離。參數(shù)是一個Point類的實例。Point類中有兩個成員變量,分別代表x坐標和y坐標。這個類很簡單,在這里不再講述,讀者可以去Javadoc查看相關內(nèi)容。setDefaultCloseOperation(int):設置在關閉窗口時的操作,一般這個參數(shù)的值是JFrame.EXIT_ON_CLOSE(int值3)。代表在窗口關閉的時候,程序結(jié)束。20.2.2Swing的線程實際上,當我們使用了Swing后,Java中就會創(chuàng)建兩個線程,專門處理Swing相關的事情。例如從操作系統(tǒng)抓取事件,事件的處理與分發(fā)和Swing組件的繪制等等。所以main線程結(jié)束后,程序中還有這幾個線程在運行,而且這幾個線程是不會自動結(jié)束的。我們在前面學習過,一個程序只有在所有線程都結(jié)束后才會自動結(jié)束。因為這兩個線程的存在,這個窗口程序會一直運行下去而不會隨著main方法的結(jié)束而推出。Swing會創(chuàng)建一些線程為它服務,所以main方法結(jié)束后程序不會結(jié)束。20.2.3Swing組件的鼻祖——JComponentJCompoent類是Container類的子類。從類的名字上也可以看出,JComponent類是Swing中的組件,但是Container類并不是。實際上,Container類是AWT類中的組件。JComponent類繼承自Container類,其主要目的也是為了借助它來完成與操作系統(tǒng)有關的操作。這樣,JComponent類中就可以完全與操作系統(tǒng)無關了。這兩個類所代表的組件都可以看作是一個“空白的畫布”。沒錯,它們的都是用來放置其它組件的。20.2.4Swing面板類上一小節(jié)中我們說過,JCompoent是一個抽象類。所以我們是無法創(chuàng)建JCompoent的實例的。在Swing中提供了一個繼承自JCompoent的子類JPanel類,作為是“空白的面板組件”。JPanel類就是一個空白的面板,除了背景色之外可以認為沒有其它元素。JPanel類主要的用途就是用做容器,放置其它的組件。JPanel類使用簡單,一般直接使用無參數(shù)的構(gòu)造方法創(chuàng)建其實例就可以了。因為這個組件不會繪制任何內(nèi)容在其區(qū)域內(nèi),所以這里不再給出演示此組件的例程。20.2.5Swing中的標簽本節(jié)中學習Swing中的標簽。標簽在圖形界面中算是最常用的組件了。它的基本作用就是顯示一行字。其類名是JLabel。主要方法如下。構(gòu)造方法JLabel():創(chuàng)建一個標簽組件。構(gòu)造方法JLabel(String):構(gòu)建一個標簽組件,顯示的內(nèi)容就是參數(shù)值。setText(String):設置標簽上顯示的文字。20.2.6Swing中的文本條文本條是用來接受用戶輸入的一行字符串的。在Swing中對應的組件類名是JTextField。它有如下幾個基本的方法。setText(String):設置文本條上顯示的字體。StringgetText():得到文本條上的字。20.2.7Swing中的文本域JTextField只能夠接收用戶一行輸入,下面我們學習JTextArea可以接收用戶的多行輸入。JTextArea的基本方法與JTextField一樣,能夠設置和獲取當前文本。除此之外,JTextArea還可以通過下面兩個方法改變文本域大小。setRows(int):設置文本域顯示的行數(shù)??梢杂糜诳刂莆谋居蚪M件的高度。setColumns(int):設置文本域的列數(shù)??梢杂糜诳刂莆谋居蚪M件的寬度。當輸入多行文本的時候,最常見的問題就是處理滾動條,在Swing中,JScrollPane類是提供滾動條的容器組件。20.2.8Swing中的組合框組合框是一個常用的組件。它可以讓用戶從下拉菜單中選擇一個條目。在Swing中,組合框組件是類JComboBox實現(xiàn)的。下面是JComboBox類中基本的方法。構(gòu)造方法JComboBox:JComboBox有一個無參數(shù)的構(gòu)造方法。也有一個以Object數(shù)組為參數(shù)的構(gòu)造方法。這時候Object數(shù)組中的元素將被添加入組合框。顯示在組合框中的字符則是Object對象的toString()方法的返回值。20.2.9Swing中的按鈕按鈕是很常用的組件。在Swing中,JButton類代表按鈕組件。從顯示的角度來看,按鈕中的方法與JLabel如出一轍,看下面的例程。20.3Swing的布局管理器在上面一小節(jié)中,講述了一些基本的Swing組件。為了能夠讓多個組件擺放在合適的位置,Swing中引入了布局管理器的概念。在前面簡單介紹過布局管理器。在本節(jié)中,我們將學習布局管理器更詳細的內(nèi)容,并介紹Swing中自帶幾種常用布局管理器。20.3.1最簡單的FlowLayoutFlowLayout是一種最簡單的布局管理器。默認情況下,它會將容器中的組件從上到下,從左到右的排列。圖20-1中正是使用了FlowLayout。FlowLayout有三個參數(shù),用來調(diào)整容器中組件的排列。這三個參數(shù)的作用分別如下。組件的對齊策略:默認情況下組件從左到右的排列,多余的空間會剩余在兩邊,也就是居中對齊。FlowLayout類中是使用int值表示對齊策略的。居中對應的就是FlowLayout.CENTER。Javadoc中對這幾種策略有詳細的敘述,在這里不再重復。組件水平間距:也就是同一行中組件之間的間距,單位是像素。組件垂直間距:兩行之間組件的間距,單位是像素。使用FlowLayout排列容器中的組件。20.3.2東南西北中之BorderLayoutBorderLayout的作用是將容器分割為東西南北中五個區(qū)域。當需要向一個容器中添加一個組件的時候,需要指明這個組件是添加到五個區(qū)域中的哪個。20.3.3平均分割之——GridLayout在前面我們曾經(jīng)使用過GridLayout布局管理器,它的作用如圖20-2所示,是將容器區(qū)域分割成大小相等的單元格。每個添加進去的組件都將占用其中的一個單元格。如果空格有剩余,那么也不會被占用。20.3.4最強大的布局管理器——GridBagLayoutGridBagLayout也是將容器分割成一個個的單元格,但是每個單元格的大小取決于其中放置的組件等各種因素。GridBagLayout會將容器分割成表格一樣的單元格,每個單元格都有一個坐標。其中左上角的坐標為(0,0)。向下向右坐標值增大。但是GridBagLayout并不會在開始的時候就確定有多少單元格,而是根據(jù)添加組件式的需要來動態(tài)運算單元格數(shù)量的。20.3.5使用多個布局管理器一個容器只能有一個布局管理器,同時,一個容器必須有一個布局管理器。在上面的例程中,實例panel1和panel2其實都是面板類,其作用是專門放置別的組件的。我們可以按照需要來它們設置布局管理器。20.4Swing的事件處理通過前面兩節(jié)的學習,已經(jīng)可以讓組件按照想要的方式顯示在屏幕上?,F(xiàn)在為止,組件除了顯示出來讓用戶看之外,還沒有發(fā)揮其“交互”的作用。圖形用戶界面的最大的作用就是完成與用戶的交互。也就是說在用戶使用鼠標或鍵盤輸入的時候,Swing組件應該完成一些相應的操作。這就是所謂的事件處理(EventHandling)。下面開始本節(jié)的內(nèi)容。20.4.1事件的傳遞和封裝Swing中所有的事件,其根源都是來自于操作系統(tǒng)所捕捉到的鼠標鍵盤等時間。在20.1.4中已經(jīng)描述了這個過程。但是從操作系統(tǒng)傳遞給組件的事件并不是直接等于我們需要處理的事件。當一個底層操作系統(tǒng)的時間傳遞給Swing后,這個事件就會被首先封裝成一個由Java類所表示的事件實例,這樣才能夠被Java語言所處理,如圖20-18所示。20.4.2事件監(jiān)聽器——事件的處理者1事件監(jiān)聽器2使用ActionListener20.4.3Swing事件處理的機制上一節(jié)中演示了如何處理按鈕觸發(fā)事件。但是僅從代碼上還是難以了解這個事件處理的機制。本小節(jié)中將以上小節(jié)中的例程為例子,一探Swing事件處理的究竟。首先需要介紹的,就是暗藏在Swing組件中的事件監(jiān)聽器列表。1事件的三個“標準配置”2事件觸發(fā)的過程3事件處理編程的過程20.4.4事件監(jiān)聽器的編寫在上面的例程中,我們是創(chuàng)建了一個獨立的MyListener類來作為事件監(jiān)聽器的。但是這不夠靈活。最大的限制就是,對于類中使用到的JLabel實例,必須以參數(shù)的形式傳遞過來。這對于Swing編程是一個很大的限制,因為一個事件處理過程中可能需要改變很多組件的屬性。如果每個組件都需要使用參數(shù)傳遞過來,那么參數(shù)列表將很長,代碼也會顯得很冗長。1使用內(nèi)部類2使用匿名類20.4.5如何學習更多的事件到此為止,本章中只介紹了JButton的一個事件處理。如何學習更多的組件中的事件呢?Javadoc是最好的幫手了。Swing事件三個“標準配置”中的添加事件監(jiān)聽器方法是一個好的突破口。這個方法的方法名有一個規(guī)律,都是以“add”開頭,以“Listener”結(jié)尾。這兩個詞之間的內(nèi)容則是對事件類型的描述。當然,最好的學習辦法就是編寫程序嘗試。知道了Swing中事件處理的機制,學習更多的事件處理方法只是一個量的問題。活用Javadoc學習更多的事件。2

溫馨提示

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

評論

0/150

提交評論