版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
面向?qū)ο蟪绦蛟O(shè)計(jì)項(xiàng)目教程本章學(xué)習(xí)目標(biāo):●
掌握J(rèn)AVA容器類JFrame和JPanel的使用●
掌握AWT和Swing常用布局的使用●
了解JAVA事件處理機(jī)制●
掌握常用可視化組件的使用項(xiàng)目13設(shè)計(jì)圖形用戶界面任務(wù)1part安裝WindowBuilder插件WindowBuilder插件是基于Eclipse的,安裝前需要JDK開發(fā)環(huán)境和Eclipse開發(fā)工具。在Eclipse官方網(wǎng)站提供了WindowBuilder插件的下載即安裝說明,地址如下:/WindowBuilder/download.php
目前WindowBuilder插件支持Eclipse的Juno、Kepler、Luna和Mars版本,如圖13.1所示,每個(gè)版本又分為發(fā)行版(ReleaseVersion)和整合版(IntegrationVersion)。1.1WindowBuilder插件安裝
在Eclipse中安裝WindowBuilder插件有以下兩種方式進(jìn)行安裝。
(1)在線安裝:在圖13.1中,單擊表格中的ReleaseVersion→UpdateSite→4.4(Luna)所對(duì)應(yīng)的link,進(jìn)入在線安裝界面,瀏覽器地址欄中的地址即為在線安裝地址。
(2)離線安裝:點(diǎn)擊ReleaseVersion→ZippedUpdateSite→4.4(Luna)所對(duì)應(yīng)的link(MD5Hash),下載WindowBuilder插件的離線安裝包。WindowBuilder插件安裝1.1
在Eclipse中的Java項(xiàng)目中,單擊File→New→Other菜單命令,通過向?qū)Х绞絼?chuàng)建一個(gè)JFrame窗體,如圖13.9所示。選擇JFrame選項(xiàng),單擊Next按鈕進(jìn)入常見JFrame對(duì)話框。1.2WindowBuilder插件的使用過程任務(wù)2part認(rèn)識(shí)GUIAWT和Swing
使用Swing組件進(jìn)行GUI編程的優(yōu)勢(shì)有以下幾點(diǎn):
(1)Swing用戶界面組件豐富,使用便捷;
(2)Swing組件對(duì)底層平臺(tái)的依賴少,與平臺(tái)相關(guān)的Bug也很少;
(3)能夠保證不同平臺(tái)上用戶一致的感觀效果;
(4)Swing組件采用MVC(Model-View-Controller,即模型-視圖-控制器)設(shè)計(jì)模式,其中模型用于維護(hù)組件的各種狀態(tài),視圖是組件的可視化表現(xiàn)??刂破饔糜诳刂茖?duì)于各種事件,組件做出怎樣的響應(yīng)。2.1Swing組件層次
大部分Swing組件都是JComponent抽象類的直接或間接子類,在JComponent抽象類中定義了所有子類組件的通用方法。JComponent類位于javax.swing包中,javax包是一個(gè)Java擴(kuò)展包。要有效地使用GUI組件,必須理解javax.swing和java.awt包中組件之間的繼承層次,尤其是理解Component類、Container類和JComponent類,其中聲明了大多數(shù)Swing組件的通用特性。Swing中的JComponent類是AWT中java..awt.Container類的子類,也是Swing和AWT的聯(lián)系之一。JComponent類的繼承層次如圖13.13所示:JComponent類是Container的子類;Container類是Component類的子類;而Component類又是Object類的子類。2.1Swing組件層次
絕大部分的Swing組件位于javax.swing包中,且繼承Container類。Swing組件按功能進(jìn)行劃分,可以分為以下幾類:
●頂層容器:JFrame、JApplet、JDialog和JWindow。
●中間容器:JPanel、JScrollPane、JSplitPane和JToolBar等。
●特殊容器:在用戶界面上具有特殊作用的中間容器,如JInternalFrame、JRootPane、JLayeredPane和JDestopPane等。
●基本組件:實(shí)現(xiàn)人機(jī)交互的組件,如JButton、JComboBox、JList、JMenu和JSlider等。
●特殊對(duì)話框組件:直接產(chǎn)生特殊對(duì)話框的組件,如JColorChooser和JFileChooser等。
●不可編輯信息的顯示組件:向用戶顯示不可編輯信息的組件,如JLable、JProgressBar和JToolTip等。
●可編輯信息的顯示組件:向用戶顯示能被編輯的格式化信息的組件,如JTextField、JTextArea和JTable等。2.1任務(wù)3part實(shí)現(xiàn)容器與布局的設(shè)計(jì)3.1JFrame頂級(jí)容器JFrame(窗口框架)是可以獨(dú)立存在的頂級(jí)窗口容器,能夠包含其他子容器,但不能被其他容器所包含。JFrame類常用的構(gòu)造方法有以下兩種:
●JFrame():不帶參數(shù)的構(gòu)造方法,該方法用于創(chuàng)建一個(gè)初始不可見的新窗體。
●JFrame(Stringtitle):帶一個(gè)字符串參數(shù)的構(gòu)造方法,該方法用于創(chuàng)建一個(gè)初始不可見的新窗體,且窗口的標(biāo)題有字符串參數(shù)指定。JFrame類常用的方法及功能如表13-1所示。JPanel中間容器JPanel(面板)是一種中間容器,中間容器與頂級(jí)容器不同,不能獨(dú)立存在,必須放在其他容器中。JPanel中間容器的意義在于為其他組件提供空間。在使用JPanel時(shí),通常先將其他組件添加到JPanel中間容器中,再將JPanel中間容器添加到JFrame頂級(jí)容器中。JPanel類常用的構(gòu)造方法有以下兩種:
●JPanel():不帶參數(shù)的構(gòu)造方法,該方法用于創(chuàng)建一個(gè)默認(rèn)為流布局(FlowLayout)的面板。
●JPanel(LayoutManagerlayout):帶參數(shù)的構(gòu)造方法,參數(shù)是一個(gè)布局管理器,用于創(chuàng)建一個(gè)指定布局的面板。JPanel類的常用方法即功能如表13-2所示。3.23.3BorderLayout邊界布局BorderLayout邊界布局允許將組件有選擇地放置到容器的東部、南部、西部、北部、中部這五個(gè)區(qū)域,如圖13.14所示。BorderLayout類的構(gòu)造方法如下:
●BorderLayout():不帶參數(shù)的構(gòu)造方法,用于創(chuàng)建一個(gè)無間距的邊界布局管理器對(duì)象。
●BorderLayout(inthgap,intvgap):帶參數(shù)的構(gòu)造方法,用于創(chuàng)建一個(gè)指定水平、垂直間距的邊界布局管理器。BorderLayout類提供了五個(gè)靜態(tài)常量,用于指定邊界布局管理中的五個(gè)區(qū)域:BorderLayout.EAST指定東部位置;BorderLayout.WEST指定西部位置;BorderLayout.SOUTH指定南部位置;BorderLayout.NORTH指定北部位置;BorderLayout.CENTER指定中部位置,該位置屬于默認(rèn)位置。BorderLayout邊界布局
一個(gè)容器使用BorderLayout邊界布局后,向容器中添加組件時(shí),需要使用帶兩個(gè)參數(shù)的add()方法,將指定組件添加到此容器的給定位置上?;菊Z法如下:publicComponentadd(Componentcomp,intindex);
例如:p.add(newJButton(“西部”),BorderLayout.WEST);
當(dāng)使用BorderLayout布局時(shí),需要注意以下兩點(diǎn):
●當(dāng)向使用BorderLayout布局的容器中添加組件時(shí),需要指定組件所放置的區(qū)域位置,如果沒有指定則默認(rèn)放置到布局的中央位置。
●通常一個(gè)區(qū)域位置只能添加一個(gè)組件,如果同一個(gè)區(qū)域中添加多個(gè)組件,則后放入的組件將會(huì)覆蓋先放入的組件。BorderLayout邊界布局是窗體(JFrame)的默認(rèn)布局。當(dāng)容器采用邊界布局時(shí),改變窗體的大小,可以發(fā)現(xiàn)東西南北四個(gè)位置上的組件長(zhǎng)度進(jìn)行拉伸,而中間位置的組件進(jìn)行擴(kuò)展。3.33.4FlowLayout流布局FlowLayout流布局是將容器中的組件按照從中間到兩邊的順序,流動(dòng)地排列和分布,直到上方的空間被占滿,才移到下一行,繼續(xù)從中間到兩邊流動(dòng)排列。FlowLayout類的構(gòu)造方法有如下三個(gè):
●FlowLayout():不帶參數(shù)的構(gòu)造方法,使用默認(rèn)對(duì)齊方式(中間對(duì)齊)和默認(rèn)間距(水平、垂直間距都為5像素)創(chuàng)建一個(gè)新的流布局管理器。
●FlowLayout(intalign):帶有對(duì)齊方式參數(shù)的構(gòu)造方法,用于創(chuàng)建一個(gè)指定對(duì)齊,默認(rèn)間距為5像素的流布局管理器。
●FlowLayout(intalign,inthgap,intvgap):帶有對(duì)齊方式、水平間距、垂直間距參數(shù)的構(gòu)造方法,用于創(chuàng)建一個(gè)指定對(duì)齊方式、水平間距、垂直間距的流布局管理器。FlowLayout類提供了三個(gè)靜態(tài)常量,用于指明布局的對(duì)齊方式,這三個(gè)常量分別是:FlowLayout.CENTER為居中對(duì)齊,也是默認(rèn)對(duì)齊方式;FlowLayout.LEFT為左對(duì)齊方式;FlowLayout.RIGHT為右對(duì)齊方式。3.5GridLayout網(wǎng)格布局GridLayout網(wǎng)格布局就像表格一樣,將容器按照行和列分割成單元格,每個(gè)單元格所占的區(qū)域大小都一樣。當(dāng)向GridLayout布局的容器中添加組件時(shí),默認(rèn)是按照從左到右、從上到下的順序,依次將組件添加到每個(gè)網(wǎng)格中。與FlowLayout不同,放置在GridLayout布局中的各組件的大小由所處區(qū)域來決定,即每個(gè)組件將自動(dòng)占滿整個(gè)區(qū)域。GridLayout類提供了兩個(gè)構(gòu)造方法如下:
●GridLayout(introws,intcols):用于創(chuàng)建一個(gè)指定行數(shù)和列數(shù)的網(wǎng)格布局管理器。
●GridLayout(introws,intcols,inthgap,intvgap):用于創(chuàng)建一個(gè)指定行數(shù)、列數(shù)、水平間距和垂直間距的網(wǎng)格布局管理器。3.6CardLayout卡片布局CardLayout卡片布局將加入到容器中的組件看成一疊卡片,每次只能看見最上面的組件。因此,CardLayout卡片布局是以時(shí)間而非空間來管理容器中的組件。CardLayout類提供了兩個(gè)構(gòu)造方法如下:
●CardLayout():不帶參數(shù)的構(gòu)造方法,用于創(chuàng)建一個(gè)默認(rèn)間距為0的新卡片布局管理器。
●CardLayout(inthgap,intvgap):帶參數(shù)的構(gòu)造方法,用于創(chuàng)建一個(gè)指定水平和垂直間距的卡片布局管理器。CardLayout類中用于控制組件可見5個(gè)常用方法如表13-3所示。
一個(gè)容器使用CardLayout卡片布局后,當(dāng)向容器中添加組件時(shí),需要使用帶兩個(gè)參數(shù)的add()方法,給組件指定一個(gè)名稱并將其添加到容器中。3.7NULL空布局
在實(shí)際開發(fā)過程中,用戶界面比較復(fù)雜,而且要求美觀,單一使用一種布局管理器很難滿足要求。此時(shí),可以采用NULL空布局??詹季质侵溉萜鞑徊捎萌魏尾季?,而是通過每個(gè)組件的絕對(duì)定位進(jìn)行布局。使用空布局的步驟如下:
(1)將容器中的布局管理器設(shè)置為null(空),即容器中不采用任何布局。例如://設(shè)置面板對(duì)象的布局為空p.setLayout(null);
(2)調(diào)用setBounds()設(shè)置組件的絕對(duì)位置坐標(biāo)及大小,或使用setLocation()方法和setSize()方法分別設(shè)置組件的坐標(biāo)和大小。例如://設(shè)置按鈕x軸坐標(biāo)為30,y軸坐標(biāo)為60,寬度40,高度25(像素)btn.setBounds(30,60,40,25);
(3)將組件添加到容器中。例如://將按鈕添加到面板中p.add(b);任務(wù)4part基本組件的應(yīng)用4.1Icon圖標(biāo)Icon是一個(gè)圖標(biāo)接口,用于加載圖片。ImageIcon類是Icon接口的一個(gè)實(shí)現(xiàn)類,用于加載指定的圖片文件,通常價(jià)值的圖片文件為gif、jpg、png等格式。ImageIcon類常用的構(gòu)造方法如下:
●ImageIcon():創(chuàng)建一個(gè)未初始化的圖標(biāo)對(duì)象。
●ImageIcon(Imageimage):根據(jù)圖像創(chuàng)建圖標(biāo)對(duì)象。
●ImageIcon(Stringfilename):根據(jù)指定的圖片文件創(chuàng)建圖標(biāo)對(duì)象。ImageIcon類常用的方法如表13-4所示。4.2JButton按鈕JButton類提供一個(gè)可接受單擊操作的按鈕功能,單擊按鈕會(huì)使其處于“下壓”形狀,松開后按鈕又會(huì)恢復(fù)原狀。在按鈕中可以顯示字符串、圖標(biāo)或兩者同時(shí)顯示。JButton類的構(gòu)造方法如下:
●JButton(Stringstr):用于創(chuàng)建一個(gè)指定文本的按鈕對(duì)象。
●JButton(Iconicon):用于創(chuàng)建一個(gè)指定圖標(biāo)的按鈕對(duì)象。
●JButton(Stringstr,Iconicon):該構(gòu)造方法帶有字符串和圖標(biāo)兩個(gè)參數(shù),用于創(chuàng)建一個(gè)指定文本和圖標(biāo)的按鈕對(duì)象。JButton類常用的方法如表13-5所示。4.3Jlabel標(biāo)簽JLabel標(biāo)簽具有標(biāo)識(shí)和提示的作用,可以顯示文字或圖標(biāo)。標(biāo)簽沒有邊界,也不會(huì)響應(yīng)用戶操作,即單擊標(biāo)簽是沒有反應(yīng)的。在GUI編程中,標(biāo)簽通常放在文本框、文本框、組合框等不帶標(biāo)簽的組件前,對(duì)用戶進(jìn)行提示。JLabel類的構(gòu)造方法如下:
●JLabel(Stringtext):用于創(chuàng)建一個(gè)指定文本的標(biāo)簽對(duì)象。
●JLabel(Iconicon):用于創(chuàng)建一個(gè)指定圖標(biāo)的標(biāo)簽對(duì)象。
●JLabel(Stringtext,Iconicon,inthorizontalAlignment):用于創(chuàng)建一個(gè)指定文本、圖標(biāo)和對(duì)齊方式的標(biāo)簽對(duì)象。JLabel類的常用方法如表13-6所示。4.4文本組件文本組件可以接收用戶輸入的文本內(nèi)容。Swing常用的文本組件有以下三種:●JTextField:文本框,該組件只能接收單行的文本輸入?!馢TextArea:文本域,該組件可以接收多行的文本輸入。●JPasswordField:密碼框,不顯示原始字符,用于接收用戶輸入的密碼。JTextField類常用的構(gòu)造方法及其常用方法如表13-7所示。文本組件JTextArea文本域組件可以編輯多行多列文本,且具有換行能力。JTextArea類常用的構(gòu)造方法及其常用方法如表13-8所示。4.4文本組件JPasswordField是JTextField類的子類,允許編輯單行文本,密碼框用于接收用戶輸入的密碼,但不顯示原始字符,而是以特殊符號(hào)(掩碼)形式顯示。JPasswordField類常用的構(gòu)造方法及其常用方法如表13-9所示。4.44.5JComboBox組合框JComboBox組合框是一個(gè)文本框和下拉列表的組合,用戶可以從下拉列表選項(xiàng)中選擇一個(gè)選項(xiàng)。JComboBox類常用的構(gòu)造方法如下:
●JComboBox():不帶參數(shù)的構(gòu)造方法,用于創(chuàng)建一個(gè)沒有選項(xiàng)的組合框。
●JComboBox(Object[]listData):構(gòu)造方法的參數(shù)是對(duì)象數(shù)組,用于創(chuàng)建一個(gè)選項(xiàng)列表為對(duì)象數(shù)組中的元素的組合框。
●JComboBox(Vector<?>listData):構(gòu)造方法的參數(shù)是泛型向量,用于創(chuàng)建一個(gè)選項(xiàng)列表為向量集合中的元素的組合框。JComboBox組合框JComboBox類常用的構(gòu)造方法及其常用方法如表13-10所示。4.54.6JList列表框JList列表框中的選項(xiàng)以列表的形式都顯示出來,用戶在列表框中可以選擇一個(gè)或多個(gè)選項(xiàng)(按住Ctrl鍵才能實(shí)現(xiàn)多選)。JList類常用的構(gòu)造方法如下:
●JList():不帶參數(shù)的構(gòu)造方法,用于創(chuàng)建一個(gè)沒有選項(xiàng)的列表框。
●JList(Object[]listData):參數(shù)是對(duì)象數(shù)組的構(gòu)造方法,用于創(chuàng)建一個(gè)選項(xiàng)列表為對(duì)象數(shù)組中的元素的列表框。
●JList(Vector<?>listData):參數(shù)是泛型向量的構(gòu)造方法,用于創(chuàng)建一個(gè)選項(xiàng)列表為向量集合中的元素的列表框。JList列表框JList類常用的常用方法如表13-11所示。4.64.7JRadioButton單選按鈕JRadioButton單選按鈕可被選擇或被取消選擇。JRadioButton類常用的構(gòu)造方法如下:
●JRadioButton(Stringstr):用于創(chuàng)建一個(gè)具有指定文本的單選按鈕。
●JRadioButton(Stringstr,booleanstate):創(chuàng)建一個(gè)具有指定文本和選擇狀態(tài)的單選按鈕,當(dāng)選擇狀態(tài)為true時(shí),表示單選按鈕被選中,狀態(tài)未false時(shí)表示未被選中。JRadioButton類常用的常用方法如表13-12所示。JRadioButton單選按鈕
單選按鈕一般成組出現(xiàn),且需與ButtonGroup按鈕組配合使用后,才能實(shí)現(xiàn)單選規(guī)則,即一次只能選擇按鈕組中的一個(gè)按鈕。因此,使用單選按鈕要經(jīng)過以下兩個(gè)步驟:
(1)先實(shí)例化所有的JRadioButton單選按鈕對(duì)象;
(2)創(chuàng)建一個(gè)ButtonGroup按鈕組對(duì)象,并用其add()方法將所有的單選按鈕對(duì)象添加到該組中,實(shí)現(xiàn)單選規(guī)則。例如://創(chuàng)建單選按鈕JRadioButtonrbMale=newJRadioButton("男",true);JRadioButtonrbFemale=newJRadioButton("女");//創(chuàng)建按鈕組ButtonGroupbg=newButtonGroup();//將rb1和rb2兩個(gè)單選按鈕添加到按鈕組中,這兩個(gè)單選按鈕只能選中其一bg.add(rbMale);bg.add(rbFemale);4.74.8JCheckBox復(fù)選框JCheckBox復(fù)選框可以控制選項(xiàng)的開啟或關(guān)閉,在復(fù)選框上單擊時(shí),而言改變復(fù)選框的狀態(tài),復(fù)選框可以被單獨(dú)使用或作為一組使用。JCheckBox類常用的構(gòu)造方法如下:
●JCheckBox(Stringstr):創(chuàng)建一個(gè)帶文本的、最初未被選定的復(fù)選框。
●JCheckBox(Stringstr,booleanstate):創(chuàng)建一個(gè)帶文本的復(fù)選框,并指定其最初是否處于選定狀態(tài)。JCheckBox類常用的方法如表13-13所示。4.8JCheckBox復(fù)選框JCheckBox復(fù)選框可以控制選項(xiàng)的開啟或關(guān)閉,在復(fù)選框上單擊時(shí),而言改變復(fù)選框的狀態(tài),復(fù)選框可以被單獨(dú)使用或作為一組使用。JCheckBox類常用的構(gòu)造方法如下:
●JCheckBox(Stringstr):創(chuàng)建一個(gè)帶文本的、最初未被選定的復(fù)選框。
●JCheckBox(Stringstr,booleanstate):創(chuàng)建一個(gè)帶文本的復(fù)選框,并指定其最初是否處于選定狀態(tài)。JCheckBox類常用的方法如表13-13所示。任務(wù)5part了解事件處理5.1Java事件處理機(jī)制在Java事件處理體系結(jié)構(gòu)中,主要涉及三種對(duì)象。
●事件(Event):在Event對(duì)象中封裝了GUI組件所發(fā)生的特定事情,通常由用戶的一次操作產(chǎn)生,而不是通過new運(yùn)算符創(chuàng)建。事件包括鍵盤事件、鼠標(biāo)事件等。Event對(duì)象一般作為事件處理方法的參數(shù),以便事件處理程序從中獲取GUI組件上所發(fā)生的事件相關(guān)信息。
●事件源(EventSource):事件發(fā)生的場(chǎng)所,通常就是各個(gè)GUI組件,例如窗口、按鈕、菜單等。
●事件監(jiān)聽器(EventListener):負(fù)責(zé)監(jiān)聽事件源所產(chǎn)生的事件,并對(duì)事件做出響應(yīng)處理。事件監(jiān)聽器對(duì)象需要實(shí)現(xiàn)監(jiān)聽接口Listener中所定義的事件處理方法;當(dāng)事件觸發(fā)時(shí),直接調(diào)用該事件對(duì)應(yīng)的處理方法對(duì)此事件進(jìn)行響應(yīng)和處理。Java事件處理機(jī)制Java的事件處理機(jī)制如圖13.19所示。
在Java程序中,實(shí)現(xiàn)事件處理需要以下三個(gè)步驟:
(1)創(chuàng)建監(jiān)聽類,實(shí)現(xiàn)監(jiān)聽接口并重寫監(jiān)聽接口中的事件處理方法;
(2)創(chuàng)建監(jiān)聽對(duì)象,即實(shí)例化上一步中所創(chuàng)建的監(jiān)聽類的對(duì)象;
(3)注冊(cè)監(jiān)聽對(duì)象,調(diào)用組件的addXXXListener()方法,將監(jiān)聽對(duì)象注冊(cè)到相應(yīng)組件上,以便監(jiān)聽對(duì)事件源所觸發(fā)的事件。5.1Java事件處理機(jī)制此處需要注意監(jiān)聽類、事件處理方法和監(jiān)聽對(duì)象之間的區(qū)別與聯(lián)系?!癖O(jiān)聽類:是一個(gè)自定義的實(shí)現(xiàn)監(jiān)聽接口的類,監(jiān)聽類可以實(shí)現(xiàn)一個(gè)或多個(gè)監(jiān)聽接口。classMyListenerimplementsActionListener{ ......}●事件處理方法:即監(jiān)聽接口中已經(jīng)定義好的相應(yīng)的事件處理方法,該方法是抽象方法,需要在創(chuàng)建監(jiān)聽類時(shí)重寫接口中的事件處理方法,并將處理事件的業(yè)務(wù)代碼放入到方法中。classMyListenerimplementsActionListener{//重寫ActionListener接口中的事件處理方法actionPerformed()publicvoidactionPerformed(ActionEvente){ ......}}●監(jiān)聽對(duì)象:就是監(jiān)聽類的一個(gè)實(shí)例對(duì)象,該對(duì)象具有監(jiān)聽功能,前提是先將監(jiān)聽對(duì)象注冊(cè)到事件源組件上,當(dāng)操作該組件產(chǎn)生事件時(shí),該事件將會(huì)被此監(jiān)聽對(duì)象捕獲并調(diào)用相應(yīng)的事件方法進(jìn)行處理。//創(chuàng)建一個(gè)監(jiān)聽對(duì)象MyListenerlistener=newMyListener();//注冊(cè)監(jiān)聽button.addActionListener(listener);5.15.2事件和事件監(jiān)聽器
事件用于封裝事件處理所必需的基本信息,包括事件源、事件信息等。AWT中提供了豐富的事件類,用于封裝不同組件上所發(fā)生的特定操作。所有AWT的事件類都是AWTEvent類的子類,而AWTEvent類又是EventObject類的子類。AWT事件分為低級(jí)事件和高級(jí)事件兩大類。低級(jí)事件是指基于特定動(dòng)作的事件,比如鼠標(biāo)進(jìn)入、單擊、拖放等動(dòng)作,組件獲得焦點(diǎn)、失去焦點(diǎn)時(shí)所觸發(fā)的焦點(diǎn)事件;高級(jí)事件是基于語義的事件,它可以不和特定的動(dòng)作相關(guān)聯(lián),而依賴于觸發(fā)此事件的類,比如單擊按鈕和菜單、滑動(dòng)滑動(dòng)條、選中單選按鈕等。事件和事件監(jiān)聽器
常見的AWT事件類如表13-14所示。5.2事件和事件監(jiān)聽器5.2任務(wù)6part實(shí)現(xiàn)人機(jī)對(duì)話Swing提供了JOptionPane標(biāo)準(zhǔn)對(duì)話框組件,用于顯示消息或獲取信息。JOptionPane類主要提供了四個(gè)靜態(tài)方法用于顯示不同類型的對(duì)話框,如表13-16所示。標(biāo)準(zhǔn)對(duì)話框6.1消息對(duì)話框JOptionPane.showMessageDialog()靜態(tài)方法用于顯示消息對(duì)話框,該方法有以下幾種常用的重載方法:
●voidshowMessageDialog(ComponentparentComponent,Objectmessage):顯示一個(gè)指定信息的消息對(duì)話框,該對(duì)話框的標(biāo)題為“message”。
●voidshowMessageDialog(ComponentparentComponent,Objectmessage,Stringtitle,intmessageType):顯示一個(gè)指定信息、標(biāo)題和消息類型的消息對(duì)話框。
●voidshowMessageDialog(ComponentparentComponent,Objectmessage,Stringtitle,intmessageType,Iconicon):顯示一個(gè)指定信息、標(biāo)題、消息類型和圖標(biāo)的消息對(duì)話框。消息對(duì)話框消息對(duì)話框
關(guān)于showMessageDialog()方法所使用到的參數(shù)說明如下:
●parentComponent參數(shù):用于指定對(duì)話框的父組件,如果為null,則對(duì)話框?qū)@示在屏幕中央,否則根據(jù)父組件所在窗體來確定位置。
●message參數(shù):用于指定對(duì)話框中所顯示的信息內(nèi)容。
●title參數(shù):用于指定對(duì)話框的標(biāo)題。
●messageType參數(shù):用于指定對(duì)話框的消息類型。對(duì)話框左邊顯示的圖標(biāo)取決于對(duì)話框的消息類型,不同的消息類型顯示不同的圖標(biāo)。在JOptionPane中提供了五種消息類型:ERROR_MESSAGE(錯(cuò)誤)、INFORMATION_MESSAGE(通知)、WARNING_MESSAGE(警告)、QUESTION_MESSAGE(疑問)、PLAIN_MESSAGE(普通)。
●icon參數(shù):用于指定對(duì)話框所顯示的圖標(biāo)。6.16.2輸入對(duì)話框JOptionPane.showInputDialog()靜態(tài)方法用于顯示輸入對(duì)話框,該方法有以下幾種常用的重載方法:
●StringshowInputDialog(Objectmessage):顯示一個(gè)指定提示信息的輸入對(duì)話框。
●StringshowInputDialog(ComponentparentComponent,Objectmessage):顯示一個(gè)指定父組件、提示信息的輸入對(duì)話框。
●StringshowInputDialog(ComponentparentComponent,Objectmessage,Stringtitle,intmessageType)::顯示一個(gè)指定父組件、提示信息、標(biāo)題以及消息類型的輸入對(duì)話框。
例如:JOptionPane.showInputDialog(null,"請(qǐng)輸入一個(gè)數(shù)字:");
運(yùn)行結(jié)果如圖13.21所示:6.3確認(rèn)對(duì)話框JOptionPane.showConfirmDialog()靜態(tài)方法用于顯示確認(rèn)對(duì)話框,該方法有以下幾種常用的重載方法:
●intshowConfirmDialog(Componentcomponent,Objectmessage):顯示一個(gè)指定父組件、提示信息、選項(xiàng)類型為YES_NO_CANCEL_OPTION、標(biāo)題為“選擇一個(gè)選項(xiàng)”的確認(rèn)對(duì)話框。
●intshowConfirmDialog(Componentcomponent,Objectmessage,Stringtitle,intoptionType):顯示一個(gè)指定父組件、提示信息、標(biāo)題和選項(xiàng)類型的確認(rèn)對(duì)話框。
●intshowConfirmDialog(Componentcomponent,Objectmessage,Stringtitle,intoptionType,intmessageType):顯示一個(gè)指定父組件、提示信息、標(biāo)題、選項(xiàng)類型和消息圖標(biāo)類型的確認(rèn)對(duì)話框。確認(rèn)對(duì)話框
其中,optionType參數(shù)代表選項(xiàng)類型,用于設(shè)置對(duì)話框中所提供的按鈕選項(xiàng)。在JOptionPane類中提供了四種選項(xiàng)類型的靜態(tài)變量:
●DEFAULT_OPTION:默認(rèn)選項(xiàng)
●YES_NO_OPTION:Yes和No選項(xiàng)
●YES_NO_CANCEL_OPTION:Yes、No和CANCEL選項(xiàng)
●OK_CANCEL_OPTION:Ok和Cancel選項(xiàng)
例如: JOptionPane.showConfirmDialog(null, "您確定要?jiǎng)h除嗎?", "刪除", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
運(yùn)行結(jié)果如圖13.22所示:6.36.4選項(xiàng)對(duì)話框JOptionPane.showOptionDialog()靜態(tài)方法用于顯示選項(xiàng)對(duì)話框,該方法的參數(shù)是固定的,具體如下:intshowOptionDialog(ComponentparentComponent,Objectmessage,Stringtitle,intoptionType,intmessageType,Iconicon,Object[]options,ObjectinitialValue):其功能是創(chuàng)建一個(gè)指定各參數(shù)的選項(xiàng)對(duì)話框,其中選項(xiàng)數(shù)有optionType參數(shù)確定,初始選擇由initialValue參數(shù)確定。選項(xiàng)對(duì)話框
例如: Object[]options={"紅","橙","黃","綠"}; JOptionPane.showOptionDialog(null, "請(qǐng)選擇一種你喜歡的顏色:", "選擇顏色", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
運(yùn)行結(jié)果如圖13.23所示:6.4任務(wù)7part制作菜單Swing中的菜單由如下幾個(gè)類組合而成:
●JMenuBar:菜單欄,菜單容器;
●JMenu:菜單,菜單項(xiàng)的容器;
●JPopupMenu:彈出式菜單,單擊鼠標(biāo)右鍵可以彈出的上下文菜單;
●JMenuItem:菜單項(xiàng),菜單系統(tǒng)中最基本的組件。
常用的菜單有兩種樣式:
●下拉式菜單:由JMenuBar、JMenu和JMenuItem組合而成的下拉式菜單;
●彈出式菜單:由JPopupMenu和JMenuItem組合而成的右鍵彈出式菜單。菜單7.1下拉式菜單
菜單欄是一個(gè)水平欄,用來管理菜單,可以位于GUI容器的任何位置,但通常放置在頂級(jí)窗口的頂部。Swing中的菜單欄是通過使用JMenuBar類來創(chuàng)建,創(chuàng)建一個(gè)JMenuBar對(duì)象后,再通過JFrame類的setJMenuBar()方法將菜單欄對(duì)象添加到窗口的頂部。例如://創(chuàng)建菜單欄對(duì)象JMenuBarmenuBar=newJMenuBar();//添加菜單欄對(duì)象到窗口frame.setJMenuBar(menuBar);1.JMenuBar菜單欄下拉式菜單2.JMenu菜單
菜單用來整合管理菜單項(xiàng),組成一個(gè)下拉列表形式的菜單,使用JMenu類可以創(chuàng)建一個(gè)菜單對(duì)象,其常用的構(gòu)造方法如下:
●JMenu():創(chuàng)建一個(gè)新的、無文本的菜單對(duì)象。
●JMenu(Stringstr):創(chuàng)建一個(gè)新的、指定文本的菜單對(duì)象,是常用的構(gòu)造方法。
●JMenu(Stringstr,booleanbool):創(chuàng)建一個(gè)新的、指定文本、是否分離式的菜單對(duì)象。
例如://菜單的文本為“新建”JMenumenuFile=newJMenu("新建");7.1下拉式菜單3.JMenuItem菜單項(xiàng)
菜單項(xiàng)是菜單系統(tǒng)中最基本的組件,其實(shí)質(zhì)是位于菜單列表中的按鈕。當(dāng)用戶選擇菜單項(xiàng)時(shí),則執(zhí)行與菜單項(xiàng)所關(guān)聯(lián)的操作。使用JMenuItem類可以創(chuàng)建一個(gè)菜單選項(xiàng)對(duì)象,菜單項(xiàng)對(duì)象可以添加到菜單中。JMenuItem類常用的構(gòu)造方法如下:
●JMenuItem():創(chuàng)建一個(gè)新的、無文本和圖標(biāo)的菜單項(xiàng);
●JMenuItem(Iconicon):創(chuàng)建一個(gè)新的、指定圖標(biāo)的菜單項(xiàng);
●JMenuItem(Stringtext):創(chuàng)建一個(gè)新的、指定文本的菜單項(xiàng);
●JMenuItem(Stringtext,Iconicon):創(chuàng)建一個(gè)新的、指定文本和圖標(biāo)的菜單項(xiàng)。
例如://菜單項(xiàng)的文本為“退出”JMenuItemmenuFile=newJMenuItem("退出");7.1下拉式菜單JMenuItem類常用的方法如表13-18所示。
使用JMenuBar、JMenu和JMenuItem實(shí)現(xiàn)下拉式菜單的步驟:
(1)創(chuàng)建一個(gè)JMenuBar菜單欄對(duì)象,調(diào)用頂級(jí)窗口的setJMenuBar()方法將其添加到窗體頂部;
(2)創(chuàng)建若干JMenu菜單對(duì)象,調(diào)用JMenuBar的add()方法將菜單添加到菜單欄中;
(3)創(chuàng)建若干個(gè)JMenuItem菜單項(xiàng),調(diào)用JMenu的add()方法將菜單項(xiàng)添加到菜單中。
下述案例示例了使用JMenuBar、JMenu和JMenuItem實(shí)現(xiàn)下拉式菜單,代碼如下所示。7.17.2彈出式菜單
彈出式菜單不是固定在菜單欄中,而是在GUI界面的任意位置點(diǎn)擊鼠標(biāo)右鍵時(shí)所彈出的一種菜單。JPopupMenu類常用的構(gòu)造方法如下:
●JPopupMenu():創(chuàng)建一個(gè)默認(rèn)無文本的菜單對(duì)象。
●JPopupMenu(Stringlabel):創(chuàng)建一個(gè)指定文本的菜單對(duì)象。JPopupMenu類常用的方法及功能如表13-19所示。任務(wù)8part制作表格與樹8.1表格Swing中對(duì)表格提供了支持,使用JTable類及其相關(guān)類可以輕松創(chuàng)建一個(gè)二維表格,還可以對(duì)表格定制外觀和編輯特性。1.JTable類JTable類用于創(chuàng)建一個(gè)表格對(duì)象,顯示和編輯常規(guī)二維單元表。JTable類的構(gòu)造方法如下:
●JTable():創(chuàng)建一個(gè)默認(rèn)模型的表格對(duì)象。
●JTable(intnumRows,intnumColumns):創(chuàng)建一個(gè)指定行數(shù)和列數(shù)的默認(rèn)表格。
●JTable(Object[][]rowData,Object[]columnNames):創(chuàng)建一個(gè)具有指定列名和二維數(shù)組數(shù)據(jù)的默認(rèn)表格。
●JTable(TableModeldm):創(chuàng)建一個(gè)指定表格模型的表格對(duì)象。
●JTable(TableModeldm,TableColumnModelcm):創(chuàng)建一個(gè)指定表格模型和列模型的表格對(duì)象。
●JTable(VectorrowData,VectorcolumnNames):創(chuàng)建一個(gè)指定列名并以Vector為輸入來源的數(shù)據(jù)表格。表格2.TableModel接口
在創(chuàng)建一個(gè)指定表格模型的JTable對(duì)象時(shí),需要使用TableModel類型的參數(shù)來指定表格模型。TableModel表格模型是一個(gè)接口,此接口定義在javax.swing.table包中。TableModel接口中定義許多表格操作的方法,如表13-21所示。
通過直接實(shí)現(xiàn)TableModel接口來創(chuàng)建表格是非常繁瑣的,因此Java提供了實(shí)現(xiàn)TableModel接口的兩個(gè)類:
●AbstractTableModel類:是一個(gè)抽象類,其中實(shí)現(xiàn)TableModel接口中的大部分方法,通過AbstractTableModel類可以靈活地構(gòu)造出自己所需的表格模式。
●DefaultTableModel類:是一個(gè)默認(rèn)的表格模式類,該類繼承AbstractTableModel抽象類。8.1表格3.TableColumnModel接口
在創(chuàng)建一個(gè)指定表格列模型的JTable對(duì)象時(shí),需要使用TableColumnModel類型的參數(shù)來指定表格的列模型。TableColumnModel接口中提供了有關(guān)表格列模型的方法,如表13-22所示。8.1表格TableColumnModel接口通常不需要直接實(shí)現(xiàn),而是通過調(diào)用JTable對(duì)象中的getColumnModel
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 架子工變更管理知識(shí)考核試卷含答案
- 貴金屬首飾機(jī)制工安全綜合評(píng)優(yōu)考核試卷含答案
- 印前處理和制作員安全生產(chǎn)規(guī)范測(cè)試考核試卷含答案
- 光學(xué)計(jì)量員崗前安全知識(shí)考核試卷含答案
- 2024年湖南農(nóng)業(yè)大學(xué)馬克思主義基本原理概論期末考試題附答案
- 2024年鄭州美術(shù)學(xué)院輔導(dǎo)員考試筆試真題匯編附答案
- 2024年邯鄲職業(yè)技術(shù)學(xué)院馬克思主義基本原理概論期末考試題附答案
- 2025年九江市特崗教師招聘真題題庫附答案
- 2025北京市公務(wù)員考試公共基礎(chǔ)知識(shí)題庫及答案1套
- 2025年云南特殊教育職業(yè)學(xué)院輔導(dǎo)員招聘考試真題匯編附答案
- 食品安全管理制度打印版
- 多聯(lián)機(jī)安裝施工方案
- 煤礦副斜井維修安全技術(shù)措施
- 公共視頻監(jiān)控系統(tǒng)運(yùn)營(yíng)維護(hù)要求
- 河南省職工養(yǎng)老保險(xiǎn)參保人員關(guān)鍵信息變更核準(zhǔn)表
- 四川大學(xué)宣傳介紹PPT
- 小學(xué)數(shù)學(xué)人教版六年級(jí)上冊(cè)全冊(cè)電子教案
- 液氨儲(chǔ)罐區(qū)風(fēng)險(xiǎn)評(píng)估與安全設(shè)計(jì)
- 阿司匹林在一級(jí)預(yù)防中應(yīng)用回顧
- 2023年福??h政務(wù)中心綜合窗口人員招聘筆試模擬試題及答案解析
- GB/T 4103.10-2000鉛及鉛合金化學(xué)分析方法銀量的測(cè)定
評(píng)論
0/150
提交評(píng)論