Java開發(fā)綜合實(shí)戰(zhàn) 教案 項(xiàng)目五 圖形界面設(shè)計(jì)_第1頁
Java開發(fā)綜合實(shí)戰(zhàn) 教案 項(xiàng)目五 圖形界面設(shè)計(jì)_第2頁
Java開發(fā)綜合實(shí)戰(zhàn) 教案 項(xiàng)目五 圖形界面設(shè)計(jì)_第3頁
Java開發(fā)綜合實(shí)戰(zhàn) 教案 項(xiàng)目五 圖形界面設(shè)計(jì)_第4頁
Java開發(fā)綜合實(shí)戰(zhàn) 教案 項(xiàng)目五 圖形界面設(shè)計(jì)_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Java開發(fā)綜合實(shí)戰(zhàn)STYLEREFbt1a項(xiàng)目五STYLEREFbt1b圖形用戶界面設(shè)計(jì)項(xiàng)目五圖形用戶界面設(shè)計(jì)思政目標(biāo)遵循人的認(rèn)知心理和行為方式,樹立科學(xué)、正確的審美觀。跨越學(xué)科界限實(shí)現(xiàn)多學(xué)科交叉,培養(yǎng)復(fù)合型人才。技能目標(biāo)能夠使用常用容器和組件創(chuàng)建圖形用戶界面能夠利用布局管理器對(duì)界面組件進(jìn)行合理布局項(xiàng)目導(dǎo)讀通過圖形用戶界面(GraphicUserInterface,GUI),用戶可以和程序進(jìn)行交互。Java在javax.swing包中提供了強(qiáng)大的用于開發(fā)桌面程序的API,方便用戶設(shè)計(jì)圖形用戶界面,并進(jìn)行GUI事件處理。JavaSwing是Java的一個(gè)龐大分支,主要用來開發(fā)GUI程序,本項(xiàng)目簡要介紹使用其中具有代表性的幾個(gè)Swing組件制作圖形用戶界面的方法。任務(wù)1初識(shí)JavaSwing任務(wù)引入通過前面幾個(gè)項(xiàng)目的學(xué)習(xí),小白創(chuàng)建了一個(gè)控制臺(tái)版本的進(jìn)銷存管理系統(tǒng)。由于操作不直觀,小白想為進(jìn)銷存管理系統(tǒng)創(chuàng)建圖形用戶界面。在Java中,使用哪些工具包可以創(chuàng)建圖形用戶界面呢?知識(shí)準(zhǔn)備一、Swing概述Java早期進(jìn)行用戶界面設(shè)計(jì)時(shí),主要使用Java抽象窗口工具包(AbstractWindowToolkit,簡稱AWT)java.awt提供的用于設(shè)計(jì)GUI的組件類。javax.swing包(簡稱Swing)是隨JDK1.2推出的一個(gè)新的包,提供了功能更為強(qiáng)大的設(shè)計(jì)GUI的類??梢哉f,Swing是AWT的增強(qiáng)版本,Swing除了保留了AWT中幾個(gè)重要的重量級(jí)組件之外,其他組件則是完全采用Java語言編寫的不依賴于本地平臺(tái)的輕量級(jí)組件,因此,使用Swing開發(fā)的窗體可以運(yùn)行在任何平臺(tái)上,而且窗體風(fēng)格能與當(dāng)前運(yùn)行平臺(tái)上的窗體風(fēng)格保持一致。java.awt和javax.swing包中部分類的層次關(guān)系的UVML類圖如圖5-1所示。圖5-1部分類的層次關(guān)系提示:Swing組件在AWT組件名稱的基礎(chǔ)上增加了一個(gè)字母“J”作為前綴。從上圖可以看出,在javax.swing包中,JComponent類是java.awt包中Container類的一個(gè)直接子類,所有組件都是從該類擴(kuò)展出來的。它也是java.awt包中Component類的一個(gè)間接子類。使用Swing設(shè)計(jì)圖形界面主要是學(xué)習(xí)使用Component類的一些重要的子類,在此之前,讀者必須先理解、掌握兩個(gè)基本概念:容器(Container)和組件(Component)。二、容器容器是GUI設(shè)計(jì)中必不可少的一種界面元素,是用來放置其他組件的一種特殊部件。在Java中,Container的子類或間接子類創(chuàng)建的對(duì)象稱為容器。提示:容器本身也是一個(gè)組件,因此可以把一個(gè)容器添加到另一個(gè)容器中實(shí)現(xiàn)容器的嵌套。Java類庫中提供了豐富的容器類,為選擇與創(chuàng)建容器帶來了極大的便捷。下面簡要介紹兩種常用容器:底層容器和面板容器。1.底層容器底層容器是指最外層的容器,即包含所有組件或容器的那層容器。Java提供的JFrame類的實(shí)例,即通常所說的窗口就是一個(gè)底層容器;JDialog類的實(shí)例,即通常所說的對(duì)話框也是一個(gè)底層容器。每一個(gè)可視化的GUl應(yīng)用程序都應(yīng)該有一個(gè)底層容器,其他組件必須被添加到底層容器中,以便借助這個(gè)底層容器和操作系統(tǒng)進(jìn)行信息交互。2.面板容器面板是一種沒有邊框、沒有標(biāo)題欄的中間層容器。常見的面板容器有兩種:一種是普通的面板容器,在Swing中用JPanel類實(shí)現(xiàn);另一種是帶滾動(dòng)視圖的容器,在Swing中用JScrollPane類實(shí)現(xiàn)。三、組件在Java中,Component類的子類或間接子類創(chuàng)建的對(duì)象稱為組件。常用的Swing組件如表5-1所示。表5-1常用的Swing組件組件名稱說明JFrame框架類JDialog對(duì)話框JPanel面板JScrollPane滾動(dòng)面板JLabel標(biāo)簽組件,常用于提供消息提示JButton普通按鈕組件JRadioButton單選按鈕組件JCheckBox復(fù)選框組件JTextField文本框組件,允許輸入單行文本JPasswordField密碼框組件,使用回顯字符顯示輸入的文本JTextArea文本域組件,允許輸入多行文本JComboBox下拉列表框組件JList列表框組件任務(wù)2創(chuàng)建常用容器與布局任務(wù)引入了解了創(chuàng)建圖形用戶界面的基本工具和概念,小白著手學(xué)習(xí)創(chuàng)建最基本的窗體、對(duì)話框和容納各種組件的面板。一個(gè)圖形用戶界面通常會(huì)包含多種組件,怎樣排列布局這些組件呢?知識(shí)準(zhǔn)備基于GUI的應(yīng)用程序應(yīng)當(dāng)提供一個(gè)能與操作系統(tǒng)直接交互的底層容器,該容器可以被直接顯示在操作系統(tǒng)所控制的平臺(tái)上,例如顯示器上。其他組件要與操作系統(tǒng)進(jìn)行信息交互,就必須被添加到底層容器中,否則用戶無法看見組件,更無法通過組件進(jìn)行交互。一、JFrame窗體JFrame類是Component的子類,也是Container類的間接子類。JFrame類的實(shí)例是一個(gè)底層容器,通常也稱為窗體。在開發(fā)應(yīng)用程序時(shí),可以通過繼承JFrame類或直接使用JFrame類的實(shí)例創(chuàng)建一個(gè)窗體。注意:窗體默認(rèn)被系統(tǒng)添加到顯示器屏幕上,因此不允許將一個(gè)窗體添加到另一個(gè)容器中。在Java應(yīng)用程序中創(chuàng)建JFrame窗體的一般操作過程為:創(chuàng)建窗體→定位窗體→指定窗體關(guān)閉方式→指定窗體可見性。1.創(chuàng)建窗體窗體可以使用JFrame或其子類創(chuàng)建,在程序中的語法格式如下:JFramewin=newJFrame(title);Containercontainer=win.getContentPane();第一行語句使用有參構(gòu)造方法創(chuàng)建標(biāo)題為title的窗體對(duì)象,如果不指定標(biāo)題參數(shù),則調(diào)用無參構(gòu)造方法,創(chuàng)建沒有標(biāo)題的窗體。創(chuàng)建的窗體默認(rèn)是不可見的,需要在后續(xù)的代碼中調(diào)用setVisible()方法使其可見。第二行語句調(diào)用getContentPane()方法將窗體轉(zhuǎn)換為容器,以便之后在容器中添加組件或設(shè)置布局管理器。2.定位窗體定位窗體包括設(shè)置窗體大小和顯示位置。JFrame類從各層父類中繼承了多個(gè)用于處理窗體大小和位置的方法,如下所示:publicvoidsetSize(intwidth,intheight):設(shè)置窗體的寬度和高度。publicvoidsetResizable(booleanb):設(shè)置窗體是否可調(diào)整大小,默認(rèn)可調(diào)整大小。publicvoidsetLocation(intx,inty):設(shè)置窗體左上角在屏幕上的坐標(biāo)位置,默認(rèn)位置為(0,0)。publicvoidsetBounds(inta,intb,intwidth,intheight):設(shè)置窗體的初始位置為(a,b),寬為width,高為height。如果要設(shè)置窗體的背景顏色,可以使用setBackground(Colorc)方法。3.指定窗體擴(kuò)展和關(guān)閉方式JFrame窗體具有“最大化”“最小化”和“關(guān)閉”等按鈕。創(chuàng)建窗體后,可以使用setExtendedState()方法指定窗體的擴(kuò)展方式。該方法的參數(shù)取值為JFrame類中的下列靜態(tài)常量:MAXIMIZED_HORIZ:水平方向最大化。MAXIMIZED_VERT:垂直方向最大化。MAXIMIZED_BOTH:水平、垂直方向都最大化。調(diào)用setDefaultCloseOperation()方法,可以指定“關(guān)閉”按鈕的處理方式。該方法的參數(shù)取值為JFrame類中的int型static常量,常用的有以下4個(gè):DO_NOTHING_ON_CLOSE:不執(zhí)行任何操作。此時(shí)要求程序在已注冊(cè)的WindowListener對(duì)象的windowClosing方法中處理該操作。HIDE_ON_CLOSE:默認(rèn)值,調(diào)用任意已注冊(cè)的WindowListener對(duì)象后隱藏當(dāng)前窗體。DISPOSE_ON_CLOSE:調(diào)用任意已注冊(cè)WindowListener的對(duì)象后隱藏當(dāng)前窗體,并釋放窗體占有的其他資源。EXIT_ON_CLOSE:退出窗體所在的應(yīng)用程序。4.指定窗體可見性JFrame窗體在創(chuàng)建后默認(rèn)是不可見的,因此,必須在程序中調(diào)用setVisible()方法顯示窗體,其參數(shù)值為true或false。案例——?jiǎng)?chuàng)建窗體示例本案例通過繼承JFrame類,演示創(chuàng)建JFrame窗體的操作方法。(1)在Eclipse中新建一個(gè)名為SwingDemo的項(xiàng)目,然后在項(xiàng)目中添加一個(gè)名為JFWindow的類。(2)在編輯器中引入包,編寫代碼定義繼承類,然后編寫主方法創(chuàng)建窗體。具體代碼如下:importjava.awt.Color;importjava.awt.Container;importjavax.swing.JFrame;publicclassJFWindowextendsJFrame{ //定義一個(gè)類繼承JFrame類 publicvoidCreateJFrame(Stringtitle){ //定義一個(gè)成員方法JFramewin=newJFrame(title);//調(diào)用有參構(gòu)造方法創(chuàng)建一個(gè)JFrame對(duì)象 Containercontainer=win.getContentPane(); //獲取容器 container.setBackground(Color.yellow); //設(shè)置容器顏色 win.setSize(300,160); //設(shè)置窗體大小 win.setLocation(200,100); //設(shè)置窗體位置//設(shè)置窗體關(guān)閉方式 win.setDefaultCloseOperation(EXIT_ON_CLOSE); win.setVisible(true); //設(shè)置窗體可視 } publicstaticvoidmain(String[]args){ newJFWindow().CreateJFrame("JFrame窗體"); //實(shí)例化JFWindow對(duì)象 }}(3)運(yùn)行程序,即可在屏幕指定位置彈出指定大小的對(duì)話框,如圖5-2所示。單擊窗體標(biāo)題欄上的最小化或最大化按鈕,可以將窗體最小化到任務(wù)欄,或最大化全屏顯示。單擊關(guān)閉按鈕,即可關(guān)閉窗體。圖5-2創(chuàng)建的JFrame窗體二、JDialog對(duì)話框JDialog繼承了AWT組件中的java.awt.Dialog類,用于創(chuàng)建Swing對(duì)話框。它與JFrame窗體類似,可以使用JDialog類或其子類的對(duì)象創(chuàng)建,在使用時(shí)也需要調(diào)用getContentPane()方法將窗體轉(zhuǎn)換為容器,然后在容器中設(shè)置窗體的特性。JDialog對(duì)話框的默認(rèn)布局是BorderLayout布局。在應(yīng)用程序中創(chuàng)建JDialog窗體需要實(shí)例化JDialog類,通常使用以下幾個(gè)JDialog類的構(gòu)造方法。publicJDialog():創(chuàng)建一個(gè)沒有標(biāo)題和父窗體的對(duì)話框。publicJDialog(Framef):創(chuàng)建一個(gè)指定父窗體的對(duì)話框,沒有標(biāo)題。publicJDialog(Framef,booleanmodel):創(chuàng)建一個(gè)指定類型的對(duì)話框,并指定父窗體f,沒有標(biāo)題。publicJDialog(Framef,Stringtitle):創(chuàng)建一個(gè)指定標(biāo)題和父窗體的對(duì)話框。publicJDialog(Framef,Stringtitle,booleanmodel):創(chuàng)建一個(gè)指定標(biāo)題、父窗體和模式的對(duì)話框。三、JPanel面板JPanel也是一種常用的容器種類。在實(shí)際應(yīng)用中,經(jīng)常使用JPanel先創(chuàng)建一個(gè)面板,在面板中添加組件,然后把面板添加到其他容器中。JPanel面板的默認(rèn)布局是FlowLayout布局,在同一個(gè)窗體中可以添加多個(gè)JPanel面板,每個(gè)面板采用不同的布局管理器,從而實(shí)現(xiàn)富于變化的界面。在Java應(yīng)用程序中,使用JPanel面板容器的基本步驟如下:(1)定義一個(gè)JPanel類的子類,并實(shí)例化一個(gè)對(duì)象。JPanel類提供了如下兩種格式的構(gòu)造方法:JPanel():創(chuàng)建一個(gè)布局管理器為FlowLayout的面板容器。JPanel(LayoutManagerlayout):這個(gè)構(gòu)造方法將創(chuàng)造一個(gè)布局管理器為layout的面板容器。(2)使用getContentPane().add()方法將面板放置到窗體中。四、JScrollPane面板如果某個(gè)界面中的組件較多,或某個(gè)組件的內(nèi)容較多,由于屏幕大小的限制,有時(shí)不能在同一屏中顯示界面中的全部組件,此時(shí),可以使用帶滾動(dòng)功能的視圖容器。JScrollPane類實(shí)現(xiàn)了一個(gè)帶有滾動(dòng)條的面板,用于為不自帶滾動(dòng)條的組件添加滾動(dòng)條。例如,通常將文本區(qū)組件JTextArea放置到滾動(dòng)面板中:JScrollPanescrollpane=newJScrollPane(newJlextArea());滾動(dòng)面板中只可以添加一個(gè)組件,然后通過滾動(dòng)條來觀看該組件。JScrollPane類提供了一些方法設(shè)置滾動(dòng)面板顯示的組件,以及滾動(dòng)條的顯示策略,如表5-2所示。表5-2JScrollPane類常用的方法方法說明setViewportView(Componentview)設(shè)置在滾動(dòng)面板中顯示的組件對(duì)象setHorizontalScrollBarPolicy(intpolicy)設(shè)置水平滾動(dòng)條的顯示策略setVerticalScrollBarPolicy(intpolicy)設(shè)置垂直滾動(dòng)條的顯示策略setWheelScrollingEnabled(booleanb)設(shè)置滾動(dòng)條是否支持鼠標(biāo)的滾動(dòng)輪其中,滾動(dòng)條的顯示策略參數(shù)的取值為JScrollPane類中對(duì)應(yīng)的如下靜態(tài)常量:HORIZONTAL_SCROLLBAR_AS_NEEDED:值為30,是水平滾動(dòng)條的默認(rèn)顯示策略,只在需要時(shí)顯示。HORIZONTAL_SCROLLBAR_NEVER:值為31,表示水平滾動(dòng)條從不顯示。HORIZONTAL_SCROLLBAR_ALWAYS:值為32,表示水平滾動(dòng)條一直顯示。VERTICAL_SCROLLBAR_AS_NEEDED:值為20,是垂直滾動(dòng)條的默認(rèn)顯示策略,只在需要時(shí)顯示。VERTICAL_SCROLLBAR_NEVER:值為21,表示垂直滾動(dòng)條從不顯示。VERTICAL_SCROLLBAR_ALWAYS:值為22,表示垂直滾動(dòng)條一直顯示。五、布局管理器在圖形用戶界面中,每個(gè)組件在容器中都有具體的位置和大小。使用布局管理器則可以使容器中的組件按照指定的策略進(jìn)行擺放,管理整個(gè)窗體的布局。不僅如此,如果改變?nèi)萜鞯拇笮?,布局管理器也可以?zhǔn)確地把組件放到指定的位置,從而有效地避免版面出現(xiàn)混亂。在Java中,容器使用setLayout()方法設(shè)置布局。Swing提供了5種布局管理器:FlowLayout(流式布局管理器)、BorderLayout(邊界布局管理器)、GridLayout(網(wǎng)格布局管理器)、CardLayout(卡片布局管理器)和GridBagLayout(網(wǎng)格包布局管理器)。這些布局管理器都是java.awt包中LayoutManager類的子類。每個(gè)容器在創(chuàng)建時(shí)都會(huì)使用一種默認(rèn)的布局管理器,在程序中可以通過調(diào)用容器對(duì)象的setLayout()方法設(shè)置布局管理器,通過布局管理器自動(dòng)進(jìn)行組件的布局管理。1.流式布局管理器(FlowLayout)FlowLayout被稱為流布局管理器,它是JPanel面板容器的默認(rèn)布局管理器。FlowLayout類提供了以下3種格式的構(gòu)造方法用于創(chuàng)建布局對(duì)象。(1)FlowLayout():創(chuàng)建一個(gè)居中對(duì)齊,水平和垂直間距均為5像素的布局管理器對(duì)象。使用FlowLayout布局的容器使用add()方法將組件順序地添加到容器中,組件的大小為默認(rèn)的最佳大小,按照加入的先后順序從左向右排列,一行排滿之后就轉(zhuǎn)到下一行繼續(xù)從左至右排列,每一行中的組件都居中排列。注意:對(duì)于添加到使用FlowLayout布局的容器中的組件,不能調(diào)用setSize(intx,inty)方法修改組件的大小,而應(yīng)調(diào)用setPreferredSize(DimensionpreferredSize)方法設(shè)置大小。例如,下面的語句設(shè)置組件label的首選尺寸為寬40,高20:label.setPreferredsize(newDimension(40,20));FlowLayout布局對(duì)象調(diào)用setAlignment(intalign)方法可以重新設(shè)置布局的對(duì)齊方式,其中align可以取值FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHT。(2)FlowLayout(intalign):創(chuàng)建一個(gè)指定對(duì)齊方式的布局管理器對(duì)象。其中,參數(shù)align為以下三個(gè)值之一,分別代表組件在每一行中左對(duì)齊、居中對(duì)齊和右對(duì)齊:FlowLayout.LEFT或0FlowLayout.CENTER或1FlowLayout.RIGHT或2(3)FlowLayout(intalign,inthgap,intvgap):這個(gè)構(gòu)造方法將創(chuàng)建一個(gè)對(duì)齊方式為align,組件之間水平間距為hgap個(gè)像素和垂直間距為vgap個(gè)像素的布局管理器對(duì)象。例如,下列語句設(shè)置窗體使用流布局管理器,其中的組件左對(duì)齊,組件之間的水平間距和垂直間距均為15:setLayout(newFlowLayout(0,15,15));2.邊界布局管理器(BorderLayout)BorderLayout被稱為邊界布局管理器,它是JFrame窗體的默認(rèn)布局管理器。這種布局管理器把容器的布局分為五個(gè)區(qū)域:NORTH(北)、WEST(西)、CENTER(中)、EAST(東)和SOUTH(南),中間的區(qū)域最大,如圖5-3所示。圖5-3BorderLayout布局方式BorderLayout類提供了以下兩種格式的構(gòu)造方法。(1)BorderLayout():構(gòu)造一個(gè)組件之間沒有間距的邊界布局對(duì)象。(2)BorderLayout(inthgap,intvgap):構(gòu)造一個(gè)邊界布局對(duì)象,組件之間的水平間距為hgap,垂直間距為vgap。設(shè)置邊界布局后,在容器中加入每一個(gè)組件時(shí)都應(yīng)該指明該組件放置的區(qū)域,具體區(qū)域由BorderLayout中的靜態(tài)常量CENTER、NORTH、SOUTH、WEST、EAST表示。例如,下面的語句使用add()方法將一個(gè)組件添加到使用BorderLayout布局的容器c的中心區(qū)域:c.add(a,BorderLayout.CENTER);添加到某個(gè)區(qū)域的組件將占據(jù)整個(gè)區(qū)域,因此每個(gè)區(qū)域只能放置一個(gè)組件,如果向某個(gè)已放置了組件的區(qū)域再放置一個(gè)組件,那么先前的組件將被后放的組件替換。也就是說,使用BorderLayout布局的容器最多只能添加5個(gè)組件,如果容器中需要加入超過5個(gè)組件,就必須使用容器的嵌套或改用其他的布局策略。在改變?nèi)萜鞯拇笮r(shí),NORTH和SOUTH區(qū)域高度不變,寬度調(diào)整,WEST和EAST區(qū)域?qū)挾炔蛔兏叨日{(diào)整,CENTER會(huì)相應(yīng)進(jìn)行調(diào)整。3.網(wǎng)格布局管理器(GridLayout)GridLayout被稱為網(wǎng)格布局管理器,這種布局管理器的特點(diǎn)是將容器按照指定的行數(shù)和列數(shù)劃分成大小相同的網(wǎng)格,組件放置于這些劃分出來的小格中,并且自動(dòng)占據(jù)網(wǎng)格的整個(gè)區(qū)域。GridLayout類提供了以下3種格式的構(gòu)造方法。(1)GridLayout():創(chuàng)建具有默認(rèn)值的網(wǎng)格布局,即每個(gè)組件占據(jù)一行一列。(2)GridLayout(introws,intcols):創(chuàng)建具有指定行數(shù)rows和列數(shù)cols的網(wǎng)格布局。(3)GridLayout(introws,intcols,inthgap,intvgap):創(chuàng)建具有指定行數(shù)、列數(shù)以及組件水平和垂直間距的網(wǎng)格布局。提示:在后兩種構(gòu)造方法中,行數(shù)和列數(shù)只能有一個(gè)參數(shù)可以為0,表示一行或一列可以排列多個(gè)組件。設(shè)置GridLayout布局后,容器調(diào)用add()方法添加組件時(shí),組件按照第一行第一列、第一行第二列、……第一行最后一列、第二行第一列、……最后一行第一列、……最后一行最后一列的順序排列。4.卡片布局管理器(CardLayout)CardLayout被稱為卡片布局管理器,使用這種布局管理器的容器可以容納多個(gè)組件,這些組件像一張張卡片一樣被層疊放入容器中。最先加入容器的是第一張(在最上面),依次向下排序。使用該布局的特點(diǎn)是,同一時(shí)刻容器只能顯示其中的一個(gè)組件,且被顯示的組件占據(jù)容器的整個(gè)區(qū)域。假設(shè)有一個(gè)容器c,使用CardLayout的一般步驟如下。(1)調(diào)用CardLayout類的構(gòu)造方法創(chuàng)建CardLayout布局對(duì)象,例如:CardLayoutcard=newCardLayout();(2)調(diào)用容器的setLayout()方法設(shè)置容器布局,例如:c.setLayout(card);(3)容器調(diào)用add(Strings,Componenta)方法將組件a加入容器c,并指定顯示該組件的代號(hào)s。組件的代號(hào)是一個(gè)字符串,與組件的名字沒有必然聯(lián)系,但是必須唯一。(4)使用CardLayout類的方法(如表5-3所示)顯示組件。表5-3CardLayout布局管理器的常用方法方法說明voidfirst(Containerc)顯示容器c中的第一個(gè)組件voidlast(Containerc)顯示容器c中的最后一個(gè)組件voidprevious(Containerc)顯示當(dāng)前顯示的組件的前一個(gè)組件voidnext(Containerc)顯示當(dāng)前顯示的組件的下一個(gè)組件voidshow(Containerc,Strings)顯示容器c中代號(hào)為s的組件。如果不存在,不會(huì)發(fā)生任何操作5.網(wǎng)格包布局管理器(GridBagLayout)GridBagLayout通常稱為網(wǎng)格包布局管理器,是最靈活也是最復(fù)雜的一種布局管理器。它與GridLayout布局管理器類似,不同的是,它允許網(wǎng)格中的組件大小各不相同,而且允許一個(gè)組件跨越一個(gè)或者多個(gè)網(wǎng)格。使用GridBagLayout布局管理器的步驟如下:(1)創(chuàng)建GridbagLayout布局管理器,并設(shè)置容器采用該布局管理器。例如:GridBagLayoutlayout=newGridBagLayout();container.setLayout(layout);(2)創(chuàng)建GridBagContraints布局約束對(duì)象,并設(shè)置該對(duì)象的相關(guān)屬性。例如:GridBagConstraintsconstraints=newGridBagConstraints();constraints.gridx=1; //設(shè)置組件左上角所在網(wǎng)格的橫向索引(即所在行)constraints.gridy=1; //設(shè)置組件左上角所在網(wǎng)格的縱向索引(即所在列)constraints.gridheight=2; //設(shè)置組件橫向跨越的網(wǎng)格數(shù)constraints.gridwidth=3; //設(shè)置組件縱向跨越的網(wǎng)格數(shù)這一步是使用GridBagLayout布局管理器的關(guān)鍵,即使用GridBagConstraints對(duì)象控制容器中每個(gè)組件的布局。提示:如果將GridBagConstraints對(duì)象的屬性gridx和gridy的值設(shè)置為GridBagConstraints.RELATIVE,表示當(dāng)前組件緊跟在上一個(gè)組件之后。如果將gridheight和gridwidth屬性的值設(shè)置為GridBagConstraints.RELATIVE,表示當(dāng)前組件為所在行或列上倒數(shù)第二個(gè)組件;屬性值為GridBagConstraints.REMAINDER,則表示當(dāng)前組件為所在行或列上的最后一個(gè)組件。GridBagConstraints對(duì)象可以重復(fù)使用,只需要改變它的屬性即可。(3)調(diào)用GridBagLayout對(duì)象的setConstraints()方法建立GridBagConstraints對(duì)象和受控組件之間的關(guān)聯(lián)。例如:layout.setConstraints(component,constraints);(4)向容器中添加組件:container.add(component);6.自定義布局如果不希望通過布局管理器對(duì)容器進(jìn)行布局,可以取消布局管理器,然后自定義組件的位置和大小進(jìn)行布局。自定義布局的步驟如下:(1)容器調(diào)用setLayout(null)方法取消布局管理器。每一個(gè)容器被創(chuàng)建后,都會(huì)有一個(gè)默認(rèn)的布局管理器。Window、Frame和Dialog的默認(rèn)布局管理器是BorderLayout,Panel的默認(rèn)布局管理器是FlowLayout。因此,這一步操作很重要,用于告知編譯器不再使用布局管理器。(2)組件調(diào)用Component.setBounds()方法設(shè)置每個(gè)組件的大小與位置。也可以調(diào)用容器中每個(gè)組件的setSize()和setLocation()方法分別設(shè)置大小和位置。任務(wù)3使用常用組件任務(wù)引入通過上一個(gè)任務(wù)的學(xué)習(xí),小白學(xué)會(huì)了創(chuàng)建常用的幾種容器,以及設(shè)置容器的布局方式。接下來就可以在容器中添加各種常用的組件了。知識(shí)準(zhǔn)備組件是應(yīng)用程序界面中的重要組成元素,豐富的組件種類構(gòu)成了強(qiáng)大的軟件開發(fā)資源。在程序開發(fā)過程中,根據(jù)不同的需求,選擇適合的組件是一件技術(shù)性很強(qiáng)的工作,它關(guān)系到應(yīng)用程序界面的美觀性、適用性、方便性和安全性。一、標(biāo)簽組件JLabel組件用于通過顯示文本和圖標(biāo)提供提示信息,可以只顯示其中之一,也可以兩者同時(shí)顯示。JLabel類提供了多種構(gòu)造方法,用于創(chuàng)建多種形式的標(biāo)簽,常用的構(gòu)造方法如下:publicJLabel():創(chuàng)建一個(gè)不帶圖標(biāo)和文本的標(biāo)簽。publicJLabel(Iconicon):創(chuàng)建一個(gè)帶圖標(biāo)的標(biāo)簽。publicJLabel(lconicon,intalign):創(chuàng)建一個(gè)帶圖標(biāo)的標(biāo)簽,圖標(biāo)的水平對(duì)齊方式為align。其中,水平對(duì)齊方式的取值為JLabel類中與水平布置方式有關(guān)的靜態(tài)常量LEFT、CENTER、RIGHT,有關(guān)說明如表1-2所示。publicJLabel(Stringtext,intalign):創(chuàng)建一個(gè)帶文本的標(biāo)簽,文字水平對(duì)齊方式為align。publicJLabel(Stringtext,Iconicon,intalign):創(chuàng)建一個(gè)帶文本和圖標(biāo)的標(biāo)簽,標(biāo)簽內(nèi)容的水平對(duì)齊方式為align。JLabel類還提供了一些用于設(shè)置標(biāo)簽的方法,如表5-4所示。表5-4JLabel類的常用方法方法說明voidsetText(Stringtext)設(shè)置標(biāo)簽顯示的文本voidsetFont(Fontfont)設(shè)置標(biāo)簽文本的字體及大小voidsetHorizontalAlignment(intalign)設(shè)置標(biāo)簽內(nèi)容的水平對(duì)齊方式voidsetHorizontalTextPosition(inttextPosition)設(shè)置標(biāo)簽文字相對(duì)于圖片在水平方向的位置voidsetVerticalTextPosition(inttextPosition)設(shè)置標(biāo)簽文字相對(duì)于圖片在垂直方向的位置在設(shè)置標(biāo)簽文字相對(duì)于圖片的顯示位置時(shí),參數(shù)textPostion的取值為JLabel類中與垂直布置方式有關(guān)的靜態(tài)常量TOP、CENTER、BOTTOM,說明如表5-5所示。表5-5JLabel類與布置方向有關(guān)的靜態(tài)常量靜態(tài)常量常量值說明LEFT2水平方向左對(duì)齊CENTER0文字水平居中對(duì)齊,或文字與圖片垂直居中對(duì)齊RIGHT4水平右對(duì)齊TOP1文字顯示在圖片上方BOTTOM3文字顯示在圖片下方如果要將一個(gè)圖像顯示在標(biāo)簽中,可以直接使用Icon接口和Imagelcon子類。lmagelcon類實(shí)現(xiàn)了Icon接口,可以根據(jù)現(xiàn)有圖片創(chuàng)建圖標(biāo)。lmagelcon類提供了多個(gè)構(gòu)造方法創(chuàng)建ImageIcon對(duì)象,下面簡要介紹幾個(gè)常用的構(gòu)造方法。publicImagelcon():創(chuàng)建一個(gè)通用的Imagelcon對(duì)象。在后續(xù)的步驟中,需要使用該對(duì)象調(diào)用setlmage(Imageimage)方法設(shè)置圖片。publicImagelcon(Stringfilename):直接從指定的圖片源創(chuàng)建圖標(biāo)。publicImagelcon(Stringfilename,Stringdescription):從指定的圖片源創(chuàng)建圖標(biāo),同時(shí)為圖標(biāo)添加簡短的描述。描述不會(huì)顯示在圖標(biāo)上。publicImagelcon(URLlocation):利用位于計(jì)算機(jī)網(wǎng)絡(luò)上的圖像文件創(chuàng)建圖標(biāo)。提示:通過圖片的名稱創(chuàng)建圖片對(duì)象,則需要將圖片和相應(yīng)的類文件放在同一路徑下,否則將無法正常顯示圖片。創(chuàng)建圖標(biāo)后,就可以利用setIcon()方法為標(biāo)簽設(shè)置圖標(biāo)。案例——?jiǎng)?chuàng)建帶圖標(biāo)的標(biāo)簽本案例將指定的圖片轉(zhuǎn)換為圖標(biāo),創(chuàng)建一個(gè)帶圖標(biāo)的標(biāo)簽。(1)打開項(xiàng)目SwingDemo,在項(xiàng)目中新建一個(gè)名為FirstImageIcon的類。然后在編輯器中導(dǎo)入包,繼承JFrame類,然后定義有參構(gòu)造方法創(chuàng)建一個(gè)窗體,在窗體中添加一個(gè)帶圖標(biāo)的標(biāo)簽。最后編寫主方法,實(shí)例化類對(duì)象。具體代碼如下:importjava.awt.Container;importjavax.swing.Icon;importjavax.swing.ImageIcon;importjavax.swing.JFrame;importjavax.swing.JLabel;publicclassFirstImageIconextendsJFrame{ publicFirstImageIcon(Strings){ this.setTitle(s); //設(shè)置窗體標(biāo)題 Containercp=getContentPane(); //獲取容器 //創(chuàng)建標(biāo)簽,指定標(biāo)簽文本和顯示位置 JLabellabel=newJLabel("ImageIconDemo",JLabel.CENTER); Iconicon=newImageIcon("src/color.jpg"); //從指定圖片創(chuàng)建圖標(biāo) label.setIcon(icon); //為標(biāo)簽設(shè)置圖標(biāo) label.setHorizontalAlignment(0);//設(shè)置標(biāo)簽文本水平居中 cp.add(label); //在容器中添加標(biāo)簽 setBounds(100,200,260,120); //設(shè)置窗體的位置和大小 setVisible(true); //設(shè)置窗體可見 setDefaultCloseOperation(EXIT_ON_CLOSE); //設(shè)置窗體關(guān)閉方式 } publicstaticvoidmain(String[]args){ newFirstImageIcon("圖標(biāo)標(biāo)簽"); //實(shí)例化FirstImageIcon對(duì)象 }}本例中使用的圖標(biāo)文件與FirstImageIcon.java放置在同一路徑下,在指定圖標(biāo)文件路徑時(shí)使用了相對(duì)路徑。在這里讀者要注意的是,相對(duì)路徑的起點(diǎn)是項(xiàng)目的根目錄。如果要使用URL獲取圖片路徑創(chuàng)建圖標(biāo),可以使用如下的語句:URLurl=FirstImageIcon.class.getResource("color.jpg");Iconicon=newImageIcon(url);第一行語句使用java.lang.Class類中的getResource()方法獲取圖片文件的URL路徑,采用的是相對(duì)于編譯后的FirstImageIcon類文件的相對(duì)路徑。此時(shí),應(yīng)將圖片文件放置在FirstImageIcon類文件編譯后的class文件所在的目錄。(2)運(yùn)行文件,即可在指定位置顯示創(chuàng)建的窗體,并在窗體中居中顯示帶圖標(biāo)的標(biāo)簽,如圖5-4所示。圖5-4運(yùn)行結(jié)果二、文本組件文本組件在實(shí)際項(xiàng)目開發(fā)中使用最為廣泛,尤其是文本框與密碼框組件。通過文本組件可以很輕松地處理單行文字、多行文字和密碼文本。Swing中的文本輸入組件分為文本框組件(JTextField)、密碼框組件(JPasswordField)和文本域組件(JTextArea)。1.文本框組件(JTextField)JTextField組件實(shí)現(xiàn)一個(gè)文本框,用于接收用戶輸入的單行文本信息。JTextField類中幾個(gè)常用的構(gòu)造方法簡要說明如下:publicJTextField():構(gòu)造一個(gè)沒有默認(rèn)文本的文本框。后續(xù)操作中可以使用setText()方法設(shè)置文本內(nèi)容;使用setColumns()方法設(shè)置文本框最多可顯示內(nèi)容的列數(shù)。publicJTextField(Stringtext):構(gòu)造一個(gè)默認(rèn)顯示指定文本的文本框。publicJTextField(intfieldwidth):構(gòu)造一個(gè)具有指定字符寬度(列數(shù))的文本框。publicJTextField(Stringtext,intfieldwidth):構(gòu)造一個(gè)默認(rèn)顯示指定文本,具有指定寬度的文本框。例如,下面的語句創(chuàng)建了一個(gè)文本框,初始值為“輸入姓名或昵稱”,寬度為20:JTextFieldtextfield=newJTextField(“輸入姓名或昵稱”,20);創(chuàng)建文本框后,可以通過setHorizontalAlignment(intalignment)方法設(shè)置文本框內(nèi)容的水平對(duì)齊方式,該方法的入口參數(shù)可以從JTextField類中如表5-6所示的靜態(tài)常量中選擇。表5-6JTextField類中有關(guān)對(duì)齊方式的常量靜態(tài)常量常量值說明LEFT2左對(duì)齊CENTER0居中對(duì)齊RIGHT4右對(duì)齊2.密碼框組件(JPasswordField)JPasswordField組件實(shí)現(xiàn)一個(gè)密碼框,用來接收用戶輸入的單行文本信息,創(chuàng)建、使用方法與JTextField組件基本相同。唯一不同的是,在密碼框中并不顯示用戶輸入的真實(shí)信息,而是顯示指定的回顯字符作為占位符。密碼框默認(rèn)的回顯字符為*,創(chuàng)建密碼框后,可以使用setEchoChar(charc)方法修改回顯字符。例如,下面的代碼創(chuàng)建一個(gè)寬度為20的密碼框,然后將回顯字符修改為#。JPasswordFieldpassword=newJPasswordField(20);Password.setEchoChar(‘#’);輸入密碼后,使用getPassword()方法可以獲取輸入的密碼字符。例如,下面的代碼獲取密碼,并轉(zhuǎn)換為字符串:charch[]=password.getPassword(); //獲取密碼,存儲(chǔ)在字符數(shù)組中Stringpwd=newString(ch); //將字符數(shù)組轉(zhuǎn)換為字符串3.文本域組件(JTextArea)JTextArea組件實(shí)現(xiàn)一個(gè)文本域,文本域可以接收用戶輸入的多行文本。JTextArea類中幾個(gè)常用的構(gòu)造方法簡要說明如下:publicJTextArea():構(gòu)造一個(gè)空文本域。后續(xù)操作中可以使用setText()方法設(shè)置默認(rèn)文本內(nèi)容;使用setRows()方法和setColumns()方法設(shè)置文本域最多可顯示內(nèi)容的行列數(shù)。publicJTextArea(Stringtext):構(gòu)造一個(gè)默認(rèn)顯示指定文本的文本域。publicJTextArea(introws,intcolumns):構(gòu)造一個(gè)指定行數(shù)和列數(shù)的空文本域。publicJTextArea(Documentdoc):構(gòu)造一個(gè)具有指定的文檔模型的空文本域。publicJTextArea(Documentdoc,StringText,introws,intcolumns):構(gòu)造一個(gè)具有指定的文檔模型、默認(rèn)文本、行列數(shù)的文本域。創(chuàng)建文本域后,可以使用setLineWrap(booleanwrap)方法設(shè)置文本域中的文本是否自動(dòng)換行,默認(rèn)為false,不自動(dòng)換行。使用append(Stringstr)方法在文本域中的文檔末尾追加文本str。使用insert(Stringstr,intpos)方法將指定文本str插入到pos指定的位置。例如,下面的代碼創(chuàng)建一個(gè)5行20列的文本域,文本內(nèi)容自動(dòng)換行,然后將文本域放置到滾動(dòng)面板中:JTextAreatextarea=newJTextArea(5,20);textarea.setLineWrap(true);JScrollPanescrollpane=newJScrollPane();Scrollpane.setViewportView(textarea); //將文本域添加到滾動(dòng)面板中Dimensiondim=textarea.getPreferredSize(); //獲取文本域的首選大小Scrollpane.setSize(dim.width,dim.height); //設(shè)置滾動(dòng)面板的大小三、按鈕組件按鈕在圖形界面中是較為常見的組件,用于觸發(fā)特定動(dòng)作。Swing提供多種按鈕,例如JButton、JRadioButton、JCheckBox等。本節(jié)簡要介紹這三種按鈕的功能和使用方法。1.普通按鈕組件(JButton)JButton組件是最簡單的按鈕組件,只是在按下和釋放兩個(gè)狀態(tài)之間切換,可以通過捕獲按下并釋放的動(dòng)作執(zhí)行一些操作,從而完成和用戶的交互。JButton類的主要構(gòu)造方法有以下幾種:publicJButton():創(chuàng)建一個(gè)Button對(duì)象。后續(xù)可以使用setText()和setIcon()方法設(shè)置按鈕的標(biāo)簽文本和圖標(biāo)。publicJButton(Stringtext):創(chuàng)建一個(gè)顯示標(biāo)簽文字的Button對(duì)象。publicJButton(Iconicon):創(chuàng)建一個(gè)帶圖標(biāo)的按鈕。publicJButton(Stringtext,Iconicon):創(chuàng)建一個(gè)帶標(biāo)簽文字和圖標(biāo)的按鈕。創(chuàng)建帶圖標(biāo)的按鈕時(shí),可以為按鈕的不同狀態(tài)設(shè)置不同的圖片。例如,使用方法setIcon(IcondefaultIcon)設(shè)置按鈕默認(rèn)狀態(tài)下顯示的圖片,使用方法setRolloverIcon(IconrolloverIcon)設(shè)置當(dāng)光標(biāo)移動(dòng)到按鈕上方時(shí)顯示的圖片,使用方法setPressedIcon(IconpressedIcon)設(shè)置按鈕被按下時(shí)的圖片。案例——?jiǎng)?chuàng)建動(dòng)態(tài)圖片按鈕本案例制作一個(gè)不同狀態(tài)下顯示不同圖片的動(dòng)態(tài)按鈕。(1)打開項(xiàng)目SwingDemo,在項(xiàng)目中新建一個(gè)名為ImageButton的類。然后在編輯器中導(dǎo)入包,繼承JFrame類,然后定義無參構(gòu)造方法創(chuàng)建一個(gè)窗體,在窗體中添加一個(gè)只顯示圖片的按鈕。最后編寫主方法,實(shí)例化類對(duì)象。具體代碼如下:importjavax.swing.ImageIcon;importjavax.swing.JButton;importjavax.swing.JFrame;publicclassImageButtonextendsJFrame{ publicImageButton(){ super();//繼承父類的構(gòu)造方法 setTitle("按鈕組件實(shí)例");//設(shè)置窗體的標(biāo)題 setBounds(100,100,280,150);//設(shè)置窗體的顯示位置及大小 setDefaultCloseOperation(EXIT_ON_CLOSE);//設(shè)置窗體關(guān)閉的方式 JButtonbutton=newJButton();//創(chuàng)建按鈕對(duì)象 button.setContentAreaFilled(false);//不繪制按鈕的內(nèi)容區(qū)域 button.setBorderPainted(false);//不繪制按鈕的邊框//設(shè)置默認(rèn)情況下按鈕顯示的圖片 button.setIcon(newImageIcon("src/img/default.gif"));//設(shè)置光標(biāo)經(jīng)過時(shí)顯示的圖片 button.setRolloverIcon(newImageIcon("src/img/over.gif"));//設(shè)置按鈕被按下時(shí)顯示的圖片 button.setPressedIcon(newImageIcon("src/img/press.gif")); button.setBounds(10,10,106,47);//設(shè)置按鈕的顯示位置及大小 getContentPane().add(button); //按鈕添加到窗體 } publicstaticvoidmain(String[]args){ ImageButtonframe=newImageButton(); //實(shí)例化窗體 frame.setVisible(true);//設(shè)置窗體可見,默認(rèn)為不可見 }}上面的代碼中,setContentAreaFilled()方法用于設(shè)置是否填充按鈕的內(nèi)容區(qū)域,默認(rèn)為填充。本例將參數(shù)設(shè)置為false,表示不填充,也就是按鈕的背景設(shè)置為透明。setBorderPainted()方法用于設(shè)置是否繪制按鈕的邊框,默認(rèn)為繪制。本例中,按鈕的顯示圖片放在項(xiàng)目根目錄下的src\img文件夾中。(2)運(yùn)行程序,即可在指定位置創(chuàng)建一個(gè)窗體,并默認(rèn)在窗體中間區(qū)域顯示按鈕,如圖5-5(a)所示。將鼠標(biāo)指針移到按鈕圖片上,顯示第二張圖片,如圖5-5(b)所示。在按鈕上按下左鍵,顯示第三張圖片,如圖5-5(c)所示。(a)(b)(c)圖5-5運(yùn)行結(jié)果2.單選按鈕組件(JRadioButton)JRadioButton組件實(shí)現(xiàn)一個(gè)單選按鈕,可以單獨(dú)使用,也可以與ButtonGroup類聯(lián)合使用。在單獨(dú)使用時(shí),該單選按鈕可以被選定和取消選定,默認(rèn)情況下未被選定。在與ButtonGroup類聯(lián)合使用時(shí),就組成了一個(gè)單選按鈕組,其中某個(gè)單選按鈕被選定后,ButtonGroup類將自動(dòng)完成按鈕組中其他按鈕的取消選定操作。JRadioButon類的常用構(gòu)造方法主要有以下幾種形式。publicJRadioButton():創(chuàng)建一個(gè)沒有標(biāo)簽文本,且初始狀態(tài)為未選中的單選按鈕。publicJRadioButton(Iconicon):創(chuàng)建一個(gè)沒有標(biāo)簽文本,且初始未選中的帶圖標(biāo)的單選按鈕。publicJRadioButton(Iconicon,booleanselected):創(chuàng)建一個(gè)沒有標(biāo)簽文本、有指定圖標(biāo)和初始狀態(tài)的單選按鈕。publicJRadioButton(Stringtext):創(chuàng)建一個(gè)有指定標(biāo)簽文本,初始未選中的單選按鈕。publicJRadioButton(Stringtext,Iconicon):創(chuàng)建一個(gè)有指定標(biāo)簽文本和圖標(biāo),初始未選中的單選按鈕。publicJRadioButton(Stringtext,Iconicon,booleanselected):創(chuàng)建一個(gè)有指定標(biāo)簽文本、圖標(biāo)和初始狀態(tài)的單選按鈕。JRadioButton類還提供了一系列用來設(shè)置單選按鈕的方法,例如setText(Stringtext)方法用于設(shè)置單選按鈕的標(biāo)簽文本;setSelected(booleanb)方法用于設(shè)置單選按鈕的初始狀態(tài)。在實(shí)際應(yīng)用中,通常會(huì)將多個(gè)單選按鈕組合在一起進(jìn)行互斥性選擇,例如選擇性別、單選題選項(xiàng)等等。此時(shí)就可使用ButtonGroup類,實(shí)例化對(duì)象之后,使用add()方法將所有的單選按鈕添加到按鈕組中。例如,下面的代碼將3個(gè)單選按鈕組織到一個(gè)按鈕組中://實(shí)例化三個(gè)單選按鈕rb1、rb2和rb3JRadioButtonrb1=newJRadioButton("A");JRadioButtonrb2=newJRadioButton("B");JRadioButtonrb3=newJRadioButton("C");//創(chuàng)建一個(gè)按鈕組groupButtonGroupgroup=newButtonGroup();//將單選按鈕添加到按鈕組group.add(rb1);group.add(rb2);group.add(rb3);3.復(fù)選框組件(JCheckBox)JCheckBox類的對(duì)象實(shí)現(xiàn)一個(gè)復(fù)選框按鈕。與單選按鈕類似,復(fù)選框也用于提供多項(xiàng)選擇,單擊該組件可在選中和未選中兩種狀態(tài)之間進(jìn)行切換。不同的是,在一組復(fù)選框按鈕中,每一個(gè)復(fù)選框都提供“選中”與“不選中”兩種狀態(tài),可進(jìn)行多項(xiàng)選擇。JCheckBox的常用構(gòu)造方法有以下幾種:publicJCheckBox():創(chuàng)建一個(gè)沒有標(biāo)簽文本和圖標(biāo),初始狀態(tài)未選中的復(fù)選框。publicJCheckBox(Iconicon,booleanchecked):創(chuàng)建一個(gè)沒有標(biāo)簽文本,有指定圖標(biāo)和初始狀態(tài)的復(fù)選框。publicJCheckBox(Stringtext,booleanchecked):創(chuàng)建一個(gè)沒有圖標(biāo),有指定標(biāo)簽文本和初始狀態(tài)的復(fù)選框。例如,下面的代碼創(chuàng)建三個(gè)復(fù)選框,初始時(shí)只有第二個(gè)復(fù)選框處于選中狀態(tài):JCheckBoxcb1=newJCheckBox("sing");JCheckBoxcb2=newJCheckBox("dance",true);JCheckBoxcb3=newJCheckBox("swimming");JRadioButton類還提供了用來設(shè)置復(fù)選框的方法,例如setText(Stringtext)方法用于設(shè)置復(fù)選框的標(biāo)簽文本;默認(rèn)情況下復(fù)選框?yàn)槲催x中狀態(tài),setSelected(booleanb)方法的參數(shù)設(shè)置為true時(shí),表示選中狀態(tài)。四、列表組件Swing提供了兩種列表組件:下拉列表框(JComboBox)與列表框(JList)。這兩種列表組件都以列表的形式提供一系列的預(yù)設(shè)選擇項(xiàng),對(duì)于美化版面和空間有限的界面來說,是非常不錯(cuò)的選擇。1.下拉列表框組件(JComboBox)JComboBox組件實(shí)現(xiàn)一個(gè)下拉列表框,初始時(shí)隱藏所有的列表項(xiàng),在單擊時(shí)通過下拉方式顯示列表項(xiàng),一般只允許選擇一個(gè)可選項(xiàng)。此外,Swing中的下拉列表框還可以設(shè)置為可編輯的,此時(shí)用戶可以在框中編輯列表項(xiàng)。在創(chuàng)建組合框時(shí),可以通過構(gòu)造函數(shù)JComboBox(Object[]items)直接初始化該組合框包含的選項(xiàng)。JComboBox類的常用構(gòu)造方法有以下幾種:publicJComboBox():創(chuàng)建具有默認(rèn)列表項(xiàng)的下拉列表框。publicJComboBox(ComboBoxModeldataModel):創(chuàng)建一個(gè)下拉列表框,其中的列表項(xiàng)為數(shù)據(jù)模型dataModel中的數(shù)據(jù)。ComboBoxModel是一個(gè)代表一般模型的接口,可以自定義一個(gè)類實(shí)現(xiàn)該接口,且必須實(shí)現(xiàn)以下兩種方法:publicvoidsetSelectedltem(Objectitem):設(shè)置下拉列表框中的選中項(xiàng)。publicObjectgetSelectedltem():返回下拉列表框中的選中項(xiàng)。在實(shí)現(xiàn)ComboBoxModel接口時(shí),還可以繼承AbstractListModel類,以便使用其中兩個(gè)操作下拉列表框的重要方法:getsize()方法返回列表的長度;getElementAt(intindex)方法返回指定索引處的值。publicJComboBox(Object[]arrayData):創(chuàng)建列表項(xiàng)為數(shù)組arrayData中的元素的下拉列表框。publicJComboBox(Vectorvector):創(chuàng)建列表項(xiàng)為可增長的對(duì)象數(shù)組vector中的元素的下拉列表框。Vector中包含可以使用整數(shù)索引進(jìn)行訪問的組件。構(gòu)造JComboBox對(duì)象后,利用下面幾個(gè)常用的方法可以方便地操作下拉列表框:addItem(Objectobj):添加列表項(xiàng)。getItemCount():返回列表項(xiàng)的個(gè)數(shù)。removeItem(Objectobj):移除列表項(xiàng)。setEditable(Booleanflag):設(shè)置列表項(xiàng)是否可編輯。2.列表框組件(JList)JList組件實(shí)現(xiàn)一個(gè)列表框,通過類似瀏覽器滾動(dòng)條的滾動(dòng)框顯示列表項(xiàng),允許選擇一個(gè)或多個(gè)選項(xiàng)。提示:列表框不自帶滾動(dòng)條,在窗體中占據(jù)固定的大小,如果需要列表框具有滾動(dòng)效果,可以將列表框放入滾動(dòng)面板中。在創(chuàng)建列表框時(shí),需要通過構(gòu)造函數(shù)JList(Object[]list)直接初始化該列表框包含的選項(xiàng)。JList類的常用構(gòu)造方法有以下幾種:publicvoidJList():創(chuàng)建一個(gè)空的列表框。在后續(xù)的操作中可以使用setListData()方法設(shè)置列表項(xiàng)。publicvoidJList(Object[]listData):創(chuàng)建列表項(xiàng)為指定數(shù)組listData中的元素的列表框。publicvoidJList(VectorlistData):創(chuàng)建列表項(xiàng)為Vector類對(duì)象中的元素的列表框。publicvoidJList(ListModeldataModel):創(chuàng)建列表項(xiàng)為ListModel模型中的數(shù)據(jù)的列表框。ListModel是Swing包中的一個(gè)接口,提供了獲取列表框?qū)傩缘姆椒?。在?shí)際應(yīng)用中,通常自定義一個(gè)類繼承實(shí)現(xiàn)該接口的抽象類AbstractListModel,以便使用該類中提供的getElementAt()方法和getSize()方法。其中g(shù)etElementAt()方法根據(jù)項(xiàng)目的索引獲取列表框中的值;getSize()方法獲取列表框中的項(xiàng)目個(gè)數(shù)。由JList組件實(shí)現(xiàn)的列表框有3種選取模式,可以通過JList類的setSelectionMode(intselectionMode)方法設(shè)置,該方法的參數(shù)可以從ListSelectionModel類中的靜態(tài)常量中選擇。這3種選取模式包括一種單選模式和兩種多選模式,如表1-1所示。表5-7ListSelectionModel類與選取模式有關(guān)的靜態(tài)常量靜態(tài)常量常量值說明SINGLE_SELECTION0只允許選取一個(gè)列表項(xiàng)SINGLE_INTERVAL_SELECTION1只允許選取連續(xù)的多個(gè)列表項(xiàng)MULTIPLE_INTERVAL_SELECTION2可選取連續(xù)或不連續(xù)的多項(xiàng)在選擇列表框中的某一項(xiàng)時(shí),按住Shift鍵并選擇列表框中的其他列表項(xiàng),可選中當(dāng)前選項(xiàng)和其他列表項(xiàng)之間的所有項(xiàng);也可以按住Ctrl鍵并單擊列表框中的單個(gè)列表項(xiàng)進(jìn)行多選。案例——汽車品牌占有率調(diào)查表本案例利用JFrame窗體、布局管理器和幾種常用的組件制作一個(gè)汽車品牌占有率調(diào)查表。(1)在Eclipse中新建一個(gè)名為CarMark的Java項(xiàng)目。然后在其中添加一個(gè)名為Questionnaire的類,設(shè)計(jì)圖形用戶界面。具體代碼如下:importjava.awt.*;importjavax.*;publicclassQuestionnaireextendsJFrame{ privatestaticfinallongserialVersionUID=1L; //聲明組件 JLabeltitle; JLabel[]labels; JTextFieldname; JRadioButtonrb1,rb2; ButtonGroupgender; JPasswordFieldtel; JComboBox<String>mark; JPanelpanel; JButtonbutton; publicQuestionnaire(){ //構(gòu)造方法 init(); //調(diào)用成員方法初始化窗體及組件 setDefaultCloseOperation(EXIT_ON_CLOSE);//設(shè)置窗體關(guān)閉的方式 } voidinit(){ Containercontent=this.getContentPane(); //將窗體轉(zhuǎn)換為容器 //創(chuàng)建調(diào)查表標(biāo)題標(biāo)簽,并設(shè)置顯示文本、字體字號(hào)、對(duì)齊方式和顏色 title=newJLabel(""); title.setText("汽車品牌占有率調(diào)查表"); title.setFont(newFont("黑體",Font.BOLD,20)); title.setHorizontalAlignment(0); //居中對(duì)齊 title.setForeground(Color.RED); content.add(title,BorderLayout.NORTH); //將標(biāo)題添加到窗體的指定區(qū)域 panel=newJPanel(); //創(chuàng)建面板 content.add(panel,BorderLayout.CENTER); //將面板添加到窗體的指定區(qū)域 //設(shè)置面板采用流式布局,并指定組件之間的水平和垂直間距 panel.setLayout(newFlowLayout(FlowLayout.LEFT,60,10)); labels=newJLabel[4];//使用數(shù)組存放調(diào)查表正文的標(biāo)簽組件 String[]names={"姓名","性別","電話","汽車品牌"};//定義標(biāo)簽顯示文本 //利用循環(huán)創(chuàng)建標(biāo)簽并設(shè)置顯示文本 for(inti=0;i<labels.length;i++){ labels[i]=newJLabel(""); labels[i].setText(names[i]); } //添加“姓名”標(biāo)簽及文本域 panel.add(labels[0]); name=newJTextField(16); panel.add(name); //添加“性別”標(biāo)簽及單選按鈕 panel.add(labels[1]); rb1=newJRadioButton("男"); rb2=newJRadioButton("女"); //將單選按鈕添加到按鈕組 gender=newButtonGroup(); gender.add(rb1); gender.add(rb2); panel.add(rb1); panel.add(rb2); panel.add(labels[2]); //添加“電話號(hào)碼”標(biāo)簽及密碼域 tel=newJPasswordField(16); tel.setEchoChar('*'); //設(shè)置密碼域的回顯字符 panel.add(tel); //添加“汽車品牌”標(biāo)簽及下拉列表框 panel.add(labels[3]); String[]mark_list={"國產(chǎn)","法系","德系","日系","美系"}; mark=newJComboBox<String>(mark_list); panel.add(mark); button=newJButton("提交"); //創(chuàng)建按鈕組件 button.setPreferredSize(newDimension(180,30)); //設(shè)置按鈕大小 panel.add(button); }}(2)在項(xiàng)目中添加一個(gè)名為Test的類,用于實(shí)例化Questionnaire類,并設(shè)置窗體屬性。具體代碼如下:publicclassTest{ publicstaticvoidmain(String[]args){ Questionnairewin=newQuestionnaire(); //實(shí)例化對(duì)象 win.setTitle("汽車品牌占有率調(diào)查表"); //設(shè)置窗體標(biāo)題 win.setBounds(100,100,320,300); //設(shè)置窗體的顯示位置及大小 win.setResizable(false); //不能修改窗體大小 win.setVisible(true); //設(shè)置窗體可見性 }}(3)運(yùn)行程序,即可創(chuàng)建如圖5-6(a)所示的圖形用戶界面。在文本域和密碼域中可以輸入文本,在按鈕組可以選擇某個(gè)單選按鈕,在下拉列表框中可以選擇一個(gè)列表項(xiàng),如圖5-6(b)所示。(a)(b)圖5-6運(yùn)行結(jié)果由于還沒有為按鈕添加事件處理方法,因此單擊按鈕時(shí)沒有響應(yīng)。提示:上面的案例設(shè)計(jì)的都是一些比較簡單的界面,在設(shè)計(jì)一些較復(fù)雜的圖形用戶界面時(shí),讀者可以在Eclipse中安裝WindowBuilder插件,對(duì)窗體進(jìn)行可視化創(chuàng)建和操作,從而快速實(shí)現(xiàn)編程的開發(fā)。在Eclipse中選擇Help→EclipseMarketplace命令打開對(duì)話框,搜索WindowBuilder,然后選擇需要的安裝包,單擊“Install”按鈕即可進(jìn)行安裝。有關(guān)WindowBuilder插件的使用方法,讀者可參閱相關(guān)資料。項(xiàng)目總結(jié)項(xiàng)目實(shí)戰(zhàn)上一章的項(xiàng)目實(shí)戰(zhàn)已實(shí)現(xiàn)了一個(gè)簡單的進(jìn)銷存控制臺(tái)應(yīng)用程序。本節(jié)將為進(jìn)銷存管理系統(tǒng)的主界面、商品入庫、商品出庫和商品查詢功能添加圖形用戶界面,方便用戶操作。讀者可仿照主界面和商品查詢界面的操作方法,自行完成商品信息修改界面的制作。(1)復(fù)制并粘貼“進(jìn)銷存管理系統(tǒng)V4.0”,在CopyProject對(duì)話框中修改項(xiàng)目名稱為“進(jìn)銷存管理系統(tǒng)V5.0”,然后單擊Copy按鈕關(guān)閉對(duì)話框。(2)在ui包中新建一個(gè)名為MainFrame的類,該類繼承JFrame類,用于實(shí)現(xiàn)進(jìn)銷存管理系統(tǒng)的主界面。具體代碼如下:packageui;importjava.awt.Color;importjavax.swing.ImageIcon;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;publicclassMainFrameextendsJFrame{ privatestaticfinallongserialVersionUID=1L; //創(chuàng)建組件 privateJPanelpanel; privateJButtoninBtn,outBtn,modifyBtn,searchBtn,exitBtn; //主界面的構(gòu)造方法 publicMainFrame(){ setTitle("進(jìn)銷存管理系統(tǒng)"); //窗體標(biāo)題 setDefaultCloseOperation(EXIT_ON_CLOSE); //關(guān)閉模式 setBounds(100,100,400,300); //窗體位置和大小 setResizable(false); //不可修改窗體大小 panel=newJPanel(); //創(chuàng)建面板 setContentPane(panel); //將面板設(shè)置為容器 panel.setLayout(null); //使用絕對(duì)布局定位組件 panel.setBackground(newColor(150,180,240)); //設(shè)置面板的背景顏色 //創(chuàng)建“商品入庫”按鈕 inBtn=newJButton("商品入庫"); inBtn.setBounds(50,40,120,40); //設(shè)置按鈕位置的大小 //設(shè)置按鈕圖標(biāo) inBtn.setIcon(newImageIcon("src/img/inbound.jpg")); panel.add(inBtn); //在容器中添加按鈕 //創(chuàng)建“商品出庫”按鈕 outBtn=newJButton("商品出庫"); outBtn.setBounds(220,40,120,40); outBtn.setIcon(newImageIcon("src/img/outbound.jpg")); panel.add(outBtn); //創(chuàng)建“修改商品”按鈕 modifyBtn=newJButton("修改商品"); modifyBtn.setBounds(50,120,120,40); modifyBtn.setIcon(newImageIcon("src/img/modify.jpg")); panel.add(modifyBtn); //創(chuàng)建“查詢商品”按鈕 searchBtn=newJButton("查詢商品"); searchBtn.setBounds(220,120,120,40); searchBtn.setIcon(newImageIcon("src/img/search.jpg")); panel.add(searchBtn); //創(chuàng)建“退出”按鈕 exitBtn=newJButton("退出"); exitBtn.setBounds(150,200,100,30); panel.add(exitBtn); setVisible(true);//設(shè)置窗體可見 } publicstaticvoidmain(String[]args){ newMainFrame(); //實(shí)例化類對(duì)象 }}(3)運(yùn)行程序,即可預(yù)覽創(chuàng)建的主界面,如圖5-7所示。圖5-7主界面(4)在ui包中新建一個(gè)名為InFrame的類,該類繼承JFrame類,用于實(shí)現(xiàn)商品入庫的界面。具體代碼如下:packageui;importjava.awt.Color;importjava.awt.Font;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.JTextField;importjavax.swing.border.EmptyBorder;publicclassInFrameextendsJFrame{ privatestaticfinallongserialVersionUID=1L; //創(chuàng)建組件 privateJPanelpanel; privateJLabelnameLabel,numLabel,priceLabel; privateFontfont; //字體 privateJTextFieldname,num,price; privateJButtonokBtn,exitBtn; //商品入庫界面的構(gòu)造方法 publicInFrame(){ this.setTitle("商品入庫"); //窗體標(biāo)題 setDefaultCloseOperation(EXIT_ON_CLOSE); //關(guān)閉模式 setBounds(100,100,400,300); //窗體位置和大小 setResizable(false); //不可修改窗體大小 panel=newJPanel(); //創(chuàng)建面板 //設(shè)置面板四周的內(nèi)邊界panel.setBorder(newEmptyBorder(5,5,5,5)); setContentPane(panel); //將面板設(shè)置為容器 panel.setLayout(null); //使用絕對(duì)布局定位組件 //設(shè)置面板的背景顏色 panel.setBackground(newColor(150,180,240)); //商品名稱 nameLabel=newJLabel("商品名稱:"); font=newFont("黑體",Font.PLAIN,14); nameLabel.setFont(font); nameLabel.setBounds(60,39,120,25); panel.add(nameLabel); name=newJTextField(); name.setC

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論