版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第8章圖形界面程序設(shè)計圖形用戶界面構(gòu)成組件的組織—布局管理器Swing容器Swing組件項目學(xué)做課程內(nèi)容二三四五一項目拓展六
一、圖形用戶界面構(gòu)成之前我們所編寫的Java程序都是在DOS方式下運行的而Windows平臺通過窗口式的圖形界面實現(xiàn)人機對話,因此編寫圖形方式的Java程序也是必須的。
一、圖形用戶界面構(gòu)成設(shè)計一個圖形用戶界面,界面如圖所示:
例1所需要的知識點圖形用戶界面基礎(chǔ)知識布局管理器的使用圖形用戶界面(GraphicsUserInterface,GUI)是程序與用戶交互的方式,利用它系統(tǒng)可以接收用戶的輸入并向用戶輸出程序運行的結(jié)果。
一、圖形用戶界面構(gòu)成
一、圖形用戶界面構(gòu)成java.awt包:java.awt包中提供了大量的進行GUI設(shè)計所使用的類和接口,是Java語言進行GUI程序設(shè)計的基礎(chǔ)。javax.swing包:swing是由100%純Java實現(xiàn)的,沒有本地代碼,不依賴操作系統(tǒng)的支持,它的出現(xiàn)使得Java的圖形用戶界面上了一個臺階。
二、組件的組織—布局管理器所謂布局,就是討論各組件在容器中如何擺放的問題。Java的組件不使用坐標這種絕對定位的形式,而使用布局管理器(layoutmanager)進行相對定位,使得程序界面能夠自動適應(yīng)不同分辨率的屏幕
二、組件的組織—布局管理器布局管理器是容器所具有的特性,每種布局管理器都指定了一套組件的放置形式,適合于不同的場合。Java的布局管理器常用的有4種:FlowLayout(流式布局)
將組件逐個放到容器的一行上
一行放滿后就重新起一個新行BorderLayout(邊界布局)
容器被劃分為東(East)、南(South)、
西(West)、北(North)、中(Center)
二、組件的組織—布局管理器
二、組件的組織—布局管理器GridLayout(網(wǎng)格式布局)
將容器分為大小相等的若干行乘若干列的網(wǎng)格,組件從左至右,從上到下放入網(wǎng)格中,每個組件占一格(表格式)每個容器都有一個默認的布局管理器當容器被創(chuàng)建后,可以通過特定的方法改變?nèi)萜鞯牟季止芾砥鱦ava.awt.ComponentContainerWindowFrameDialogPaneljava.applet.AppletBorderLayoutFlowLayout
二、組件的組織—布局管理器1.FlowLayout布局管理器FlowLayout是Panel類的默認布局管理器布局方式:
將組件逐個地放在容器的一行上,一行放滿就另起一個新行。
其中,一行的長度取決于容器的寬度
二、組件的組織—布局管理器1.FlowLayout布局管理器構(gòu)造方法:publicFlowLayout();publicFlowLayout(intalign);publicFlowLayout(intalign,inthgap,intvgap);其中,align表示對齊方式,hgap和vagp表示組件的水平和垂直間距,單位是像素。若沒有指定align,則默認讓組件居中擺放align的取值為常量:FlowLayout.LEFT,
FlowLayout.RIGHT和FlowLayout.CENTER例如:newFlowLayout(FlowLayout.LEFT)
二、組件的組織—布局管理器1.FlowLayout布局管理器設(shè)置FlowLayout布局
FlowLayoutflow=newFlowLayout();
Framefr=newFrame();
fr.setLayout(flow);由于一個容器只要設(shè)置了布局通常就不會再改變,因此上面的語句可以簡化成:
fr.setLayout(newFlowLayout());
二、組件的組織—布局管理器1.FlowLayout布局管理器可以設(shè)置框架fr為組件左對齊的FlowLayout布局:
fr.setLayout(newFlowLayout(FlowLayout.LEFT));還可以設(shè)置框架fr為組件左對齊的FlowLayout布局,并且組件的水平間距為20像素,垂直間距為40像素:
fr.setLayout(newFlowLayout(FlowLayout.LEFT,20,40));
二、組件的組織—布局管理器2.BorderLayout布局管理器BorderLayout是Frame類和Dialog類的默認布局管理器布局方式:
容器被劃分為東(East)、南(South)、
西(West)、北(North)、中(Center)五個區(qū)域變化規(guī)律為:組件的相對位置不變,大小發(fā)生變化。
二、組件的組織—布局管理器水平拉寬我們可以看到:南、北、中控件大小會有變化,東、西控件大小不變化。2.BorderLayout布局管理器
二、組件的組織—布局管理器上下拉長可以看到:東、西、中控件大小會有變化,南、北控件大小不變化。2.BorderLayout布局管理器
二、組件的組織—布局管理器2.BorderLayout布局管理器構(gòu)造方法:publicBorderLayout();publicBorderLayout(inthgap,intvgap);其中,hgap和vagp表示組件的水平和垂直間距,單位是像素,默認為0
二、組件的組織—布局管理器2.BorderLayout布局管理器Container容器類放置組件的方法:
publicComponentadd(Componentcomp,intindex)
其中,index指明組件放置的區(qū)域,分別為:
BorderLayout.EAST或"East"
BorderLayout.WEST或"West"
BorderLayout.SOUTH或"South"
BorderLayout.NORTH或"North"
BorderLayout.CENTER或"Center"
二、組件的組織—布局管理器3.GridLayout布局管理器布局方式:
這是一種網(wǎng)格式布局,它將容器分為大小相等的若干行和若干列的網(wǎng)格,組件從左至右從上到下依次放入網(wǎng)格中,每個組件占一格
實際上,這種布局方式就是一個表格
二、組件的組織—布局管理器使容器中的各組件呈網(wǎng)格狀分布。各組件的排列方式為:從上到下,從左到右。組件放入容器的次序決定了它在容器中的位置。網(wǎng)格每列寬度相同,等于容器的寬度除以網(wǎng)格的列數(shù)。網(wǎng)格每行高度相同,等于容器的高度除以網(wǎng)格的行數(shù)。容器大小改變時,組件的相對位置不變,大小會改變。若組件數(shù)超過網(wǎng)格設(shè)定的個數(shù),則布局管理器會自動增加網(wǎng)格個數(shù),原則是保持行數(shù)不變。
二、組件的組織—布局管理器3.GridLayout布局管理器構(gòu)造方法:publicGridLayout();publicGridLayout(introws,intcols);publicGridLayout(introws,intcols,
inthgap,intvgap);
其中,rows和cols表示行數(shù)和列數(shù);hgap和vagp表示組件的水平和垂直間距,單位是像素,默認為0當沒有rows和cols時,將構(gòu)造一個只有一行的網(wǎng)格,列數(shù)由組件的個數(shù)而定
二、組件的組織—布局管理器importjava.awt.*;importjavax.swing.*;classGridFrameextendsJFrame{
publicGridFrame(Strings){ super(s); setSize(200,200); Stringstr[]={"1","2","3","4","5","6","7","8","9"}; setLayout(newGridLayout(3,3,2,2));JButtonbtn[];//聲明按鈕數(shù)組
btn=newJButton[str.length];//創(chuàng)建按鈕數(shù)組
for(inti=0;i<str.length;i++){btn[i]=newJButton(str[i]);this.add(btn[i]);} setVisible(true);
}
publicstaticvoidmain(String[]args){GridFramegl=newGridFrame("網(wǎng)格布局演示!"); }}
網(wǎng)格布局示例
二、組件的組織—布局管理器在實際應(yīng)用中,網(wǎng)格布局(有時僅僅一行或者一列)在組織窗口的局部區(qū)域比較有用。添加修改刪除查詢統(tǒng)計如果需要一行或多行相同尺寸的按鈕,那么可以把按鈕放在一個面板里,該面板使用網(wǎng)格布局進行管理。
二、組件的組織—布局管理器網(wǎng)格組布局是所有布局管理器之母??煽醋魇菦]有限制的網(wǎng)格布局。它按行列來排列組件,但是行和列的大小都是可變的,并且可以合并相鄰的單元格來適應(yīng)更大的組件。組件不需要填充整個單元格區(qū)域,并且可以指定單元格內(nèi)的對齊方式。使用網(wǎng)格組布局管理器進行布局的步驟創(chuàng)建一個GridBagLayout類型的對象。不必指定網(wǎng)格的行數(shù)和列數(shù),布局管理器會根據(jù)后面所給的信息來確定。把此對象設(shè)成容器的布局管理器。創(chuàng)建一個GridBagConstraints類型的對象。該對象指定組件如何在網(wǎng)格組中布局。對于每一個組件,填充GridBagConstraints對象。最后,使用add(component,constraints)方法來添加組件和約束。
二、組件的組織—布局管理器成員變量gridx,gridy:指定添加組件左上角的行和列的位置,坐標從0開始。gridwidth,gridheight:指定組件將占用多少行和多少列。weightx,weighty:區(qū)域放大時的增量參數(shù),網(wǎng)格布局中的每個區(qū)域都需要設(shè)置。如果設(shè)置為0,那么該區(qū)域?qū)⒂肋h保持它的初始尺寸不變。如果你需要一行或一列保持固定大小,那么你需要把該行或該列的所有組件的增量都設(shè)置為0。這些變量的缺省值為0。ipadx,ipady:指定組件的最小高度和寬度
二、組件的組織—布局管理器成員變量fill:指定在單元大于組件的情況下,組件如何填充此單元,共有4可選值。缺省值為:GridBagConstraints.NONEanchor:指定將組件放置在單元中的位置,共有9個可選值。缺省值為:GridBagConstraints.CENTER
二、組件的組織—布局管理器GridBagLayoutlayout=newGridBagLayout();panel.setLayout(layout);GridBagConstraintsconstraints=newGridBagConstraints();Constraints.weightx=100;Constraints.weighty=100;Constraints.gridx=0;Constraints.gridy=2;Constraints.gridwidth=2;Constraints.gridheight=1;contentPane.add(style,bold);
二、組件的組織—布局管理器
類GridBagConstraints中提供了一些相應(yīng)的屬性和常量來設(shè)置對組件的空間限制:
gridx,gridygridwidth,gridheightfillipadx,ipadyinsetsarchorweightx,weighty
二、組件的組織—布局管理器(1)gridx,gridy(int)gridx指明組件顯示區(qū)域左端在容器中的位置,若為0,則組件處于最左端的單元。它是一個非負的整數(shù),其缺省值為GridBagConstraints.RELATIVE,表明把組件放在前一個添加到容器中的組件的右端。
gridy指明組件顯示區(qū)域上端在容器中的位置,若為0,則組件處于最上端的單元。它是一個非負的整數(shù),其缺省值為GridBagConstraints.RELATIVE,表明把組件放在前一個添加到容器中的組件的下端。
二、組件的組織—布局管理器(2)gridwidth,gridheight(int)
gridwidth指明組件顯示區(qū)在一行中所占的網(wǎng)格單元數(shù)(寬度)。它是一個非負的整數(shù),其缺省值為1。若其值為GridBagConstraints.REMAINDER,表明該組件是一行中最后一個組件;若其值為GridBagConstraints.RELATIVE,表明該組件緊挨著該行中最后一個組件。
gridheight指明組件顯示區(qū)在一列中所占的網(wǎng)格單元數(shù)(高度)。它是一個非負的整數(shù),其缺省值為1。若其值為GridBagConstraints.REMAINDER,表明該組件是一列中最后一個組件;若其值為GridBagConstraints.RELATIVE,表明該組件緊挨著該列中最后一個組件。
二、組件的組織—布局管理器(3)fill(int)
fill屬性指明當組件所在的網(wǎng)格單元的區(qū)域大于組件所請求的區(qū)域時,是否改變組件的尺寸:是按照水平方向填滿顯示區(qū),還是按垂直方向填滿顯示區(qū),其取值可為:
GridBagConstraints.NONE:缺省值,保持原有尺寸,兩個方向都不填滿;
GridBagConstraints.HORIZONTAL:按水平方向填滿顯示區(qū),高度不變;
GridBagConstraints.VERTICAL:按垂直方向填滿顯示區(qū),寬度不變;
GridBagConstraints.BOTH:兩個方向上都填滿顯示區(qū)。
二、組件的組織—布局管理器(4)ipadx,ipady(int)
ipadx指明組件的寬度與指定的最小寬度之間的關(guān)系:組件的寬度為“指定的最小寬度+ipadx*2”。其缺省值為0。
ipady指明組件的高度與指定的最小高度之間的關(guān)系:組件的高度為“指定的最小高度+ipady*2”。其缺省值為0。
二、組件的組織—布局管理器(5)insets(Insets)
insets指明了組件與其顯示區(qū)邊緣之間的距離,大小由一個Insets對象指定。
Insets類有四個屬性:
top:上端間距
bottom:下端間距
left:左端間距
right:右端間距其缺省值為一個上述四個屬性值都為0的對象:
newInsets(0,0,0,0);
二、組件的組織—布局管理器NCEPU(6)archor(int)
archor屬性指明了當組件的尺寸小于其顯示區(qū)時,在顯示區(qū)中如何放置該組件的位置,其值可為:
GridBagConstraints.CENTER(缺省值)
GridBagConstraints.NORTHGridBagConstraints.NORTHEASTGridBagConstraints.EASTGridBagConstraints.SOUTHEASTGridBagConstraints.SOUTHGridBagConstraints.SOUTHWESTGridBagConstraints.WESTGridBagConstraints.NORTHWEST
二、組件的組織—布局管理器(7)weightx,weighty(double)
weightx指明當容器擴大時,如何在列間為組件分配額外的空間,其值可以從0.0到1.0,缺省值為0.0。
weighty指明當容器擴大時,如何在行間為組件分配額外的空間,其值可以從0.0到1.0,缺省值為0.0。若兩者都為0,所有組件都團聚在容器的中央,因為此時所有額外空間都添加在網(wǎng)格單元與容器邊緣之間。數(shù)值越大,表明組件的行或列將占有更多的額外空間。若兩者都為1.0,表明組件的行或列將占有所有的額外空間。
二、組件的組織—布局管理器
當一個容器的布局方式為GridBagLayout時,往其中添加一個組件,必須先用GridBagConstraints設(shè)置該組件的空間限制。//在一個容器中GridBagLayoutg=newGridBagLayout();GridBagConstraintsc=newGridBagConstraints();setLayout(g);Buttonb=newButton(“Test”);//生成組件bc.fill=…//設(shè)置c的值……g.setConstraints(b,c);//根據(jù)c的值對組件b進行空間限制add(b);
二、組件的組織—布局管理器
GridBagLayout是獲取GridBagConstraints實例中的值為某個組件設(shè)置了空間限制,當往容器中添加了該組件后,該GridBagConstraints實例還可繼續(xù)用于其他組件,當然其中值需要做相應(yīng)的調(diào)整。
二、組件的組織—布局管理器使用一個網(wǎng)格組布局的步驟在一張紙上繪出組件布局草圖。找出這樣一種網(wǎng)格:小組件可以容納在一個單元格內(nèi),大組件占用多個單元格。使用0、1、2、……來標記網(wǎng)格中的行和列?,F(xiàn)在可以設(shè)置gridx、gridy、gridwidth、gridheight的值。對于每個組件來說,考慮如下問題:它是否需要水平或垂直地填充它所在的單元格?如果不是,那么它應(yīng)該如何對齊?這些問題的答案就是fill和anchor參數(shù)。把所有的增量都設(shè)置為100。然而,如果你需要某一行或某一列始終保持它的默認大小,那么把屬于該行或該列的所有組件的weightx或weighty都設(shè)置為0。編寫代碼。仔細檢查GridBagConstraints的設(shè)置。一個錯誤的約束參數(shù)可能會破壞整個布局。編譯、運行程序。網(wǎng)格組布局示例3.null布局管理器前面所述的五種布局都不能隨意地放置組件,即不能達到精確定位和控制組件的要求。那么如何像VB、VC++等RAD(快速開發(fā)環(huán)境)那樣實現(xiàn)精確定位的目的呢?答案是使用null布局。使用null布局如圖所示的登錄頁面,模擬公司招聘員工管理系統(tǒng)項目程序、員工登陸系統(tǒng)時,先進行身份驗證(用戶名和口令)
二、組件的組織—布局管理器用戶名稱:
用戶密碼:chengyongxiao******登陸重設(shè)_□X3.null布局管理器請用戶改變窗口的大小,你將發(fā)現(xiàn)組件的大小和位置不會隨著窗口的變化而變化,這不符合一般應(yīng)用程序的要求,因此這種布局具有很多局限性。
總之,在實際中應(yīng)靈活使用布局,將多種布局聯(lián)合起來使用,僅使用一種是很難滿足設(shè)置要求的。
二、組件的組織—布局管理器Swing組件都是AWT的Container類的直接子類或間接子類。
三、Swing容器Swing的類層次結(jié)構(gòu)ObjectComponentJFrameContainerWindowFrameDialogJDialogJTextJComboBoxJLabelJListJMenuBarJOptionPaneJPanelJScrollBarAbstractButtonJToggleButtonJMenuItemJButtonJCheckBoxJRadioButtonJComponentJMenuAppletJApplet創(chuàng)建可視化界面的一般步驟選擇外觀布局管理添加組件事件處理
創(chuàng)建容器java程序的GUI設(shè)計主要包括下述三個概念:組件—Component容器—Container布局管理器--LayoutManager
三、Swing容器頂級容器:一般是一個頂層窗口(框架)JFrame:用于框架窗口的類,應(yīng)用程序至少使用一個框架窗口。JDialog:用于對話框的類。JApplet:用于使用Swing組件的JavaApplet的類。中間容器:需要包含在頂層容器中使用的容器。JPanel:面板,是最靈活、最常用的中間容器。JScrollPane:與JPanel類似,但還可在大的組件或可擴展組件周圍提供滾動條。JTabbedPane:包含多個組件,但一次只顯示一個組件。用戶可在組件之間方便地切換。JToolBar:按行或列排列一組組件(通常是按鈕)。
三、Swing容器在AWT庫中,對應(yīng)于框架的類是Frame,在Swing庫中,相應(yīng)的類是JFrame。JFrame類擴展了Frame類。大部分AWT組件在Swing中都有等價的組件,它們在表示形式上差一個“J”。
三、Swing容器—JFrameJFrame的使用JFrame類的構(gòu)造方法如下:JFrame()創(chuàng)建無標題的初始不可見框架。JFrame(Stringtitle)創(chuàng)建標題為title的初始不可見框架。為了在選擇框架的關(guān)閉按鈕時能退出程序,應(yīng)添加WindowListener監(jiān)聽器或書寫下列代碼:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JFrame的常用方法setIconImage——窗口最小化(在Java中稱為圖標化)時,把一個Image對象用作圖標setTitle——設(shè)置窗口中標題欄的文字setResizable——設(shè)置用戶是否可以改變框架大小。dispose——關(guān)閉窗口,并回收該窗口的所有資源setLocation——設(shè)置組件的位置setBounds——重新設(shè)置組件的大小和位置。setSize()——用來設(shè)置大小。setVisible(true)——用來設(shè)置該窗口為可見的對JFrame添加組件有兩種方式:(1)用getContentPane()方法獲得JFrame的內(nèi)容面板,再對其加入組件:frame.getContentPane().add(childComponent)如何添加組件(2)建立一個Jpanel或JDesktopPane等中間容器,把組件添加到容器中,用setContentPane()方法把該容器置為JFrame的內(nèi)容面板:JpanelcontentPane=newJpanel();……//把其它組件添加到Jpanel中;frame.setContentPane(contentPane);//把contentPane對象設(shè)置成為frame的內(nèi)容面板JFrame的使用Swing常用的容器—JPanelJPanel面板是一種添加到其他容器使用的容器組件。JPanel的構(gòu)造方法:publicJPanel()publicJPanel(LayoutManagerlayout)
JPanel可指定邊界,可用JComponent類的setBorder()方法設(shè)置邊界。其用法如下:
publicvoidsetBorder(Borderborder)Swing常用容器—JPanel的使用JPanel面板是容器組件,沒有標題,不能獨立存在。實例化以后必須使用Container類的add方法裝入到Window對象或Frame對象中。可用javax.swing.BorderFactory類中的方法獲得importjavax.swing.*;importjava.awt.*;importjava.awt.image.BufferedImage;importjavax.imageio.ImageIO;classGUIDemo1{ publicstaticvoidmain(String[]args)throwsException {JFramef=newJFrame("第一個Java窗口"); f.setSize(300,200);BufferedImageimage=ImageIO.read(f.getClass().getResource("/MPj.jpg"));f.setIconImage(image);//設(shè)置圖標
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);//設(shè)置容器可見性f.setResizable(false);f.setLocationRelativeTo(null);
JPanelp=newJPanel(); p.setBackground(Color.BLUE); f.setLayout(null); p.setSize(100,100); f.getContentPane().add(p); }}課堂練習(xí)設(shè)計一個含有JPanel的自定義的JFrame類,形式如下圖:三、Swing的常用組件—JLabelJLabel(標簽)是用戶只能查看不能修改的文本/圖像顯示區(qū)域。
三、Swing的常用組件--JTextFieldJTextField(單行文本域)是一個單行條形文本區(qū),能夠接收輸入、顯示輸出。獲得文本域的內(nèi)容x=Integer.parseInt(text1.getText().trim());
重新設(shè)置文本域的內(nèi)容resultText.setText(s);
三、Swing的常用組件--JTextFieldsetText(Strings)設(shè)置文本框中的文本getText()獲取文本框中的文本setEditable(booleanb)指定文本框的可編輯性。創(chuàng)建的文本框默認為可編輯的獲取兩個文本域的輸入并求和,然后顯示在第三個文本域中。三、Swing的常用組件—JTextFieldimportjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassTFMath{ publicstaticvoidmain(String[]args){ newTFFrame().launchFrame(); }}classTFFrameextendsJFrame{ JTextFieldnum1,num2,num3; publicvoidlaunchFrame(){ num1=newJTextField(10); num2=newJTextField(10); num3=newJTextField(15); JLabellblPlus=newJLabel("+"); JButtonbtnEqual=newJButton("="); btnEqual.addActionListener(newMyMonitor()); setLayout(newFlowLayout()); add(num1); add(lblPlus); add(num2); add(btnEqual); add(num3); pack(); setVisible(true); }
Swing常用的組件——文本域
privateclassMyMonitorimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ intn1=Integer.parseInt(num1.getText()); intn2=Integer.parseInt(num2.getText()); num3.setText(""+(n1+n2)); } }
}Swing的常用組件--JPasswordFieldJPasswordField(口令框)接受用戶的輸入,但不會真正顯示出來,而是顯示回顯符。密碼域JPasswordFieldimportjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassTFPassword{ publicstaticvoidmain(String[]args){ newTFFrame2(); }}密碼域JPasswordFieldclassTFFrame2extendsJFrame{ TFFrame2() { JPasswordFieldpf=newJPasswordField(); add(pf); pf.addActionListener(newTFActionListener2()); pack(); setVisible(true); }}密碼域JPasswordFieldclassTFActionListener2implementsActionListener{ publicvoidactionPerformed(ActionEvente) { JPasswordFieldpf=(JPasswordField)e.getSource(); System.out.println(pf.getText()); tf.setText(""); }}密碼域JPasswordFieldSwing的常用組件--JPasswordField實戰(zhàn):實現(xiàn)上面的圖形用戶界面。Swing的常用組件--JTextAreaJTextArea(多行文本框)可以輸入或輸出多行文本。設(shè)定是否可編輯
setEditable(Booleanb)JTextArea(Stringtext,introws,intcolumns)指定文本創(chuàng)建文本區(qū),指定行數(shù)和列數(shù)換行方式:手動換行自動換行:通過設(shè)置換行屬性來避免手動換行。增加滾動條:通過把文本區(qū)插入到一個滾動窗格中來實現(xiàn)。這也是給其他組件添加滾動條的方法。textArea.setLineWrap(true);JScrollPanescrollPane=newJScrollPane(textArea);Swing的常用組件--JTextArea文本區(qū)的三種顯示方式Swing的常用組件--JTextArea例:創(chuàng)建包含文本區(qū)、文本框和“提交”按鈕的窗口。
在文本區(qū)中輸入文字,單擊“提交”按鈕,文本
框中會出現(xiàn)同樣的文字。Swing的常用組件--JTextAreaimportjava.awt.*;importjavax.swing.*;classJTextAreaExextendsJFrame{JTextAreata;JTextFieldt;JButtonb;JTextAreaEx(){setSize(400,250);setLayout(newFlowLayout());Containerc=getContentPane();setVisible(true);ta=newJTextArea(5,10);//創(chuàng)建文本區(qū)、文本框和按鈕
ta.setLineWrap(true);//自動換行,只添加垂直滾動條
JScrollPanescrollPane=newJScrollPane(ta);//加滾動條
scrollPane.setBorder(BorderFactory.createLoweredBevelBorder());//設(shè)置邊界
c.add(scrollPane);t=newJTextField(10);b=newJButton("提交");c.add(b);c.add(t);pack();}
publicstaticvoidmain(String[]args){JTextAreaExtae=newJTextAreaEx();}publicvoidactionPerformed(ActionEvente){ t.setText(ta.getText()); }}其他Swing組件的使用NCEPUSwing的常用組件—復(fù)選框JCheckBoxJCheckBox(復(fù)選框)有選中和未選中兩種狀態(tài),允許用戶從一組選項中進行多個選擇。
設(shè)置復(fù)選框的文本
setText獲取復(fù)選框的文本
getText常用的構(gòu)造方法有:JCheckBox()JCheckBox(Iconicon)JCheckBox(Iconicon,booleanselected)JCheckBox(Stringtext)JCheckBox(Stringtext,booleanselected)JCheckBox(Stringtext,Iconicon)JCheckBox(Stringtext,Iconicon,booleanselected)Swing的常用組件—復(fù)選框JCheckBoxJCheckBox的相關(guān)事件類事件響應(yīng)用戶點擊復(fù)選框使其選中狀態(tài)發(fā)生變化時會引發(fā)
ItemEvent事件。實現(xiàn)ItemListener接口的itemStateChanged()方法。publicvoidaddItemListener(ItemListenerl)
設(shè)置復(fù)選框的事件監(jiān)聽器。查閱JDK文檔,學(xué)習(xí)ItemEvent類的常用方法。例題:創(chuàng)建如下窗口,包含三個復(fù)選框和一個面板,選中某一復(fù)選框后,面板的背景色就變成相應(yīng)的顏色。Swing的常用組件—復(fù)選框JCheckBoximportjava.awt.*; importjava.awt.event.*;publicclassCheckBoxExpimplementsItemListener{ Framef;Panelp1,p2; Checkboxck1,ck2,ck3; publicvoiddisplay() {f=newFrame("復(fù)選框練習(xí)"); ck1=newCheckbox("紅色"); ck2=newCheckbox("黃色"); ck3=newCheckbox("藍色"); p1=newPanel();p2=newPanel(); f.add(p1,"North");f.add(p2);p1.add(ck1);p1.add(ck2);p1.add(ck3);f.setSize(400,200);f.setVisible(true); ck1.addItemListener(this); ck2.addItemListener(this); ck3.addItemListener(this);}publicvoiditemStateChanged(ItemEvente)
{ if(e.getSource()==ck1) p2.setBackground(Color.red);elseif(e.getSource()==ck2) p2.setBackground(Color.yellow); else p2.setBackground(Color.blue);
} publicstaticvoidmain(Stringargs[]){ newCheckBoxExp().display(); }
}Swing常用的組件—單選框JRadioButtonJRadioButton(單選按鈕)通常是成組使用的,可以通過ButtonGroup類進行管理。常用的構(gòu)造方法有:JRadioButton()JRadioButton(Iconicon)JRadioButton(Icon,booleanselected)JRadioButton(Stringtext)JRadioButton(Stringtext,booleanselected)JRadioButton(Stringtext,Iconicon)JRadioButton(Stringtext,Iconicon,booleanselected)單選框(JRadioButton)示例要保證三個JRadioButton的互斥性應(yīng)該把這三個控件放到同一個ButtonGroup中Swing的常用組件—組合框JComboBoxJComboBox(組合框)是一種“多選一”的組件,可編輯每項的內(nèi)容,而且每項的內(nèi)容可以是任意類。當用戶選取組合框中的某一選擇項時,可激發(fā)ItemEvent事件。常用的構(gòu)造方法有:
構(gòu)造函數(shù)使用缺省數(shù)據(jù)模型創(chuàng)建JComboBoxpublicJComboBox()包含指定數(shù)組元素的組合框publicJComboBox(Object[]items)Swing的常用組件—組合框JComboBox創(chuàng)建組合框向組合框?qū)ο罄锛尤霔l目
JComboBoxjobsBox=newJComboBox();jobsBox.addItem("job1");jobsBox.addItem("job2");使用String數(shù)組創(chuàng)建
String[]comboItem={“job1”,”job2”};JComboBoxjobsBox=newJComboBox(comboItem);
對組合框是否能夠被編輯也可以進行設(shè)置。
jobsBox.setEditable(true);Swing的常用組件—組合框JComboBox組合框的內(nèi)容可以動態(tài)變化addItem方法:把條目添加到列表的末尾;insertItermAt方法:將新條目添加到列表的任何位置;removeItem方法和removeItemAt方法:刪除指定條目;removeAllItems方法:刪除所有條目。Swing的常用組件—組合框JComboBoxjobsBox.insertItermAt(“job7”,6);//在第7個位置增加“job7”條目。jobsBox.removeItem(“job7”);//刪除“job7”條目。jobsBox.removeItemAt(5);//刪除第6個條目,即“job6”。jobsBox.removeAllItems();//刪除所有條目。當選擇組合框的條目時,會產(chǎn)生單擊事件(ActionEvent)和項事件(ItemEvent)。組合框事件處理方法說明
publicObjectgetSelectedItem()返回當前選中項。注意類型。
publicintgetSelectedIndex()返回選中項的位置。列表中第一項的位置是0。組合框(JComboBox)常用的事件處理方式Swing的常用組件—列表框(JList)JList(列表框)向用戶顯示一組選項構(gòu)造方法publicJList()
構(gòu)造空列表publicJList(Object[]
listData)
以數(shù)組中的元素構(gòu)造一個JList。
String[]fontSize={“小四”,“四號”,“小五”,“五號”};JListlist=newJList(fontSize);publicJList(Vector<?>
listData)
以Vector中的元素構(gòu)造一個
JList。建立列表框前,需要指定所顯示的列表條目:String[]courses={“Math”,“English”,“Physics”,“Chemic”,“Biology”,“Politics”};JListcourseList=newJList(courses);如果列表框比較長,而顯示屏幕比較小,可以設(shè)置列表中顯示的行數(shù),同時使用滾動條:courseList.setVisibleRowCount(4);JScrollPanelistScrollPane=newJScrollPane(courseList);Swing的常用組件—列表框(JList)選擇列表框中的多個條目有兩種方式:連續(xù)條目選擇和間斷條目選擇。用戶選擇列表框條目時,列表框就會產(chǎn)生選擇事件。將列表選擇監(jiān)聽器ListSelectionListener添加給列表組件,并在該監(jiān)聽器中實現(xiàn)valueChanged方法:courseList.addListSelectionListener(newcourseListener());...classcourseListenerimplementsListSelectionListener{ publicvoidvalueChanged(ListSelectionEventevent) {...}}獲得用戶所選擇的列表框條目以及條目所在的索引號需要使用getSelectedValues方法和getSelectedIndices方法:Object[]selectedCourses=courseList.getSelectedValues();int[]selectedIndexCourses=courseList.getSelectedIndices();Swing的常用組件—列表框(JList)JList(列表框)可以選擇一項或多項。列表框查閱JDK文檔,學(xué)習(xí)JList類的常用方法及相關(guān)事件。Swing的常用組件—列表框(JList)練習(xí)例:創(chuàng)建一個包含列表框和文本框的窗口,要求單擊或雙擊列表框中某一選項后,文本框中顯示該選項。Swing的常用組件—列表框(JList)
importjava.awt.*;importjava.awt.event.*;publicclassList1implementsActionListener,ItemListener{Framef;TextFieldtf1;Listls1;
publicvoiddisplay(){ f=newFrame("列表框練習(xí)"); f.setSize(300,200); f.setLocation(300,300); f.setBackground(Color.lightGray); f.setLayout(newFlowLayout()); tf1=newTextField(10);f.add(tf1);
ls1=newList();f.add(ls1); ls1.add("北京"); ls1.add("上海");ls1.add("南京"); ls1.add("西安");f.setVisible(true);ls1.addActionListener(this);
ls1.addItemListener(this);}
publicvoidactionPerformed(ActionEvente){ tf1.setText(ls1.getSelectedItem());}
publicvoiditemStateChanged(ItemEvente){ tf1.setText(ls1.getSelectedItem());}
publicstaticvoidmain(Stringarg[]){(newList1()).display();}}NCEPUSwing的常用組件—菜單JMenuItem類型有三種:JMenuItemJCheckBoxMenuItemJRadioButtonMenuItemJMenuBarJMenuJMenuItem菜單的分類菜單條式菜單(下拉菜單)彈出式菜單菜單組件與其他組件不同,不能放入普通的容器,也無法用布局管理器對其加以控制,只能被放入菜單容器中。Swing的常用組件—菜單下拉式菜單
下拉式菜單主要由三部分組成菜單條(JMenuBar)菜單(JMenu)菜單項(JMenuItem)。菜單欄菜單條菜單菜單項創(chuàng)建菜單欄
JMenuBarmenuBar=newJMenuBar();setJMenuBar(menuBar);創(chuàng)建菜單JMenufileMenu=newJMenu("File");創(chuàng)建子菜單。JMenuoptionMenu=newJMenu("Option");創(chuàng)建菜單項
JMenuItemnewfile=newJMenuItem("新建");創(chuàng)建下拉式菜單將菜單項加入到子菜單或菜單中。將子菜單加入到菜單中。將菜單加入到菜單欄中。創(chuàng)建菜單的步驟importjavax.swing.*;importjava.awt.event.*;publicclassMenuDemoextendsJFrameimplementsActionListener{ JTextAreatf=newJTextArea(); JMenuBarmbar=newJMenuBar(); JMenumenu=newJMenu("文件"); JMenuItemnewfile=newJMenuItem("新建"); JMenuItemopen=newJMenuItem("打開"); JMenuItemclose=newJMenuItem("關(guān)閉"); JMenuItemquit=newJMenuItem("退出");
創(chuàng)建菜單的步驟publicMenuDemo(){ super("Menu實例");newfile.addActionListener(this); open.addActionListener(this); close.addActionListener(this); quit.addActionListener(this);menu.add(newfile);menu.add(open);menu.add(close);menu.addSeparator();menu.add(quit);
mbar.add(menu);setJMenuBar(mbar); add(tf); addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);} }); }
publicvoidactionPerformed(ActionEvente){ if(e.getSource()==newfile)tf.setText("新建文件"); if(e.getSource()==open)tf.setText("打開文件"); if(e.getSource()==close)tf.setText("關(guān)閉文件"); if(e.getSource()==quit)System.exit(0); }publicstaticvoidmain(String[]args){ JFramef=newMenuDemo(); f.setSize(200,200); f.setVisible(true);}}
同創(chuàng)建一般的菜單項幾乎一樣,只需注意復(fù)選框和單選按鈕的不同構(gòu)造方法以及單選按鈕組的構(gòu)建:創(chuàng)建單選按鈕菜單項“Forward”,并將“Forward”菜單項加入到“Search”菜單中。ButtonGroupgroup=newButtonGroup();forwardItem=newJRadioButtonMenuItem("Forward");group.add(forwardItem);searchMenu.add(forwardItem);創(chuàng)建復(fù)選框菜單項“ToolBar”,并加入到子菜單中。JCheckBoxMenuItemtoolItem=newJCheckBoxMenuItem("ToolBar");optionMenu.add(toolItem);創(chuàng)建復(fù)選框和單選按鈕菜單項
菜單項的使用狀態(tài)菜單項能夠被選取取決于菜單項的啟用和禁用狀態(tài)://初始設(shè)置“Save”菜單項為禁用狀態(tài)。saveItem.setEnabled(false);快捷鍵和加速器快捷鍵顯示為帶有下劃線的字母,加速器則顯示為菜單項旁邊的組合鍵。://設(shè)置菜單的快捷鍵。fileMenu.setMnemonic('F');//設(shè)置“Exit”菜單項的快捷鍵為“T”。JMenuItemexitItem=newJMenuItem("Exit",'T');//設(shè)置“Exit”菜單項的加速器為“Ctrl+T”。exitItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_T,InputEvent.CTRL_MASK));Swing的常用組件—菜單彈出式菜單彈出式菜單的創(chuàng)建和菜單的創(chuàng)建基本相同,也需要新建一個彈出式菜單后再加入菜單項。彈出式菜單。popup=newJPopupMenu();新建彈出式菜單中的“Cut”菜單項和監(jiān)聽器。cutItemPop=newJMenuItem("Cut",'C');popup.add(cutItemPop);Swing的常用組件—菜單菜單示例
創(chuàng)建菜單欄創(chuàng)建菜單加入到菜單欄中創(chuàng)建菜單項加入到菜單中最后將整個菜單欄加入到某個容器中(Frame)事件處理創(chuàng)建菜單的步驟創(chuàng)建如下圖所示的帶菜單的窗口,完成相應(yīng)的繪圖功能。NCEPUimportjava.awt.*; importjava.awt.event.*;publicclassMenuExpimplementsActionListener{Framef;MenuBarmyMenuBar;MenumenuDraw,menuHelp;MenuItemitemCircle,itemRect,itemLine;
publicvoiddisplay(){f=newFrame("帶有菜單的窗口");f.setSize(300,300);f.setLocation(300,300);f.setBackground(Color.lightGray);myMenuBar=newMenuBar();menuDraw=newMenu("畫圖");menuHelp=newMenu("幫助");myMenuBar.add(menuDraw);myMenuBar.add(menuHelp);itemCircle=newMenuItem("畫圓");itemRect=newMenuItem("畫矩形");itemLine=newMenuItem("畫線");
NCEPU
menuDraw.add(itemLine);menuDraw.add(itemCircle);menuDraw.add(itemRect);f.setMenuBar(myMenuBar);f.setVisible(true);itemCircle.addActionListener(this);itemRect.addActionListener(this);itemLine.addActionListener(this);}publicvoidactionPerformed(ActionEvente){ if(e.getActionCommand()==“畫圓”)
f.getGraphics().drawOval(100,100,150,150); elseif(e.getActionCommand()==“畫矩形”)
f.getGraphics().drawRect(50,1a00,100,100); elseif(e.getActionCommand()==“畫線”)
f.getGraphics().drawLine(100,100,200,200); }
publicstaticvoidmain(Stringarg[]){(newMenuExp()).display();}NCEPU創(chuàng)建JMenuItem先創(chuàng)建一個JMenuBar對象再創(chuàng)建若干個JMenu對象添加處理事件添加JMenuItem到JMenu添加JMenu到JMenuBar添加JMenuBar到容器NCEPU先創(chuàng)建一個JMenuBar對象再創(chuàng)建若個JMenu對象Swing常用的組件—對話框?qū)υ捒蚍譃槟J綄υ捒蚝蜔o模式對話框。模式對話框必須在用戶處理完后才允許用戶與主窗口繼續(xù)進行交互。無模式對話框允許用戶同時在對話框和程序剩余部分中輸入信息。在Swing中,提供了四種簡單的對話框:showMessageDialog:顯示一條消息等待用戶點擊OK;showConfirmDialog:顯示一條消息并等待確認;showOptionDialog:顯示一條消息并等待用戶在一組自定義選項中的選擇;showInputDialog:顯示一條消息并等待用戶的輸入。以showConfirmDialog為例:對話框的使用
底部按鈕的類型和對話框有密切的關(guān)系,對于showMessageDialog和showInputDialog對話框來
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度打印機維修保養(yǎng)及節(jié)能改造合同4篇
- 2025年度船舶交易稅費結(jié)算合同年度更新4篇
- 2024物業(yè)管理公司商業(yè)運營與管理合同
- 2025年度臨時工派遣服務(wù)及管理合同4篇
- 二零二五年度文化活動臨時場地租賃合同樣本4篇
- 2025年度沖樁機設(shè)備進出口貿(mào)易合同模板8篇
- 二零二五年度海上貨物保險及索賠處理合同3篇
- 二零二五年度專業(yè)設(shè)備租賃合同協(xié)議書4篇
- 2025年度房地產(chǎn)企業(yè)個人勞務(wù)派遣服務(wù)規(guī)范合同3篇
- 2025版物流車輛維修保養(yǎng)服務(wù)合同規(guī)范4篇
- 供油合同模板
- 2025-2030年中國氯酸鈉產(chǎn)業(yè)十三五規(guī)劃及投資風(fēng)險評估報告
- 質(zhì)量系統(tǒng) GMP 實施指南
- 住房公積金繳存情況專項審計報告
- 猴痘病毒資料
- 《鼻部應(yīng)用解剖》PPT課件
- 第二章 熱力學(xué)基本定律
- 義務(wù)教育教科書英語Go for it七年級上冊單詞表
- 第一章 電力系統(tǒng)潮流計算1
- 粉末丁腈橡膠使用方法
- SM2模擬測試1
評論
0/150
提交評論