圖形用戶界面設(shè)計(jì)課件_第1頁(yè)
圖形用戶界面設(shè)計(jì)課件_第2頁(yè)
圖形用戶界面設(shè)計(jì)課件_第3頁(yè)
圖形用戶界面設(shè)計(jì)課件_第4頁(yè)
圖形用戶界面設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩94頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

圖形用戶界面設(shè)計(jì)圖形用戶界面設(shè)計(jì)Contents1.圖形用戶界面概述2.創(chuàng)建圖形用戶界面3.布局管理器NCEPUContents1.圖形用戶界面概述2.創(chuàng)建圖形用戶界面3.2圖形用戶界面概述

之前我們所編寫的Java程序都是在DOS方式下運(yùn)行的而Windows平臺(tái)通過(guò)窗口式的圖形界面實(shí)現(xiàn)人機(jī)對(duì)話,因此編寫圖形方式的Java程序也是必須的。NCEPU圖形用戶界面概述之前我們所編寫的Java程序都是在DOS方3設(shè)計(jì)一個(gè)圖形用戶界面,界面如圖所示:

例1所需要的知識(shí)點(diǎn)圖形用戶界面基礎(chǔ)知識(shí)布局管理器的使用NCEPU設(shè)計(jì)一個(gè)圖形用戶界面,界面如圖所示:例1所需要的知識(shí)點(diǎn)NCE4多行文本框圖形用戶界面的組成組件單選按鈕單行文本框標(biāo)簽復(fù)選按鈕按鈕組合框窗口面板容器NCEPU多行文本框圖形用戶界面的組成組件單選按鈕單行文本框標(biāo)簽復(fù)選按5圖形用戶界面設(shè)計(jì)概述圖形用戶界面(GraphicsUserInterface,GUI)是程序與用戶交互的方式,利用它系統(tǒng)可以接收用戶的輸入并向用戶輸出程序運(yùn)行的結(jié)果。NCEPU圖形用戶界面設(shè)計(jì)概述圖形用戶界面(Graphics6GUI支持包java.awt包:java.awt包中提供了大量的進(jìn)行GUI設(shè)計(jì)所使用的類和接口,是Java語(yǔ)言進(jìn)行GUI程序設(shè)計(jì)的基礎(chǔ)。javax.swing包:swing是由100%純Java實(shí)現(xiàn)的,沒(méi)有本地代碼,不依賴操作系統(tǒng)的支持,它的出現(xiàn)使得Java的圖形用戶界面上了一個(gè)臺(tái)階。NCEPUGUI支持包java.awt包:java.awt包中提供了7抽象窗口工具集AWTAWT是Java基礎(chǔ)類庫(kù)(JFC,JavaFoundationClass)的一部分,它為大規(guī)模的GUI開(kāi)發(fā)提供了豐富的基礎(chǔ)結(jié)構(gòu)。AWT的核心軟件包java.awtjava.awt主要由組件類(Component)、事件類(Event)、布局類(FlowLayout等)、菜單類(MenuComponet)等組成。NCEPU抽象窗口工具集AWTAWT是Java基礎(chǔ)類庫(kù)(JFC,J8抽象窗口工具集AWT

java.awt包中的主要類以及組件類的繼承關(guān)系顏色類字體類組件類布局類復(fù)選框組類圖像類事件類菜單組件類圖形類java.lang.Object標(biāo)簽類按鈕類容器類復(fù)選框類滾動(dòng)條類選擇框類列表框類文本組件類畫布類面板類窗口類框架類對(duì)話框類文件對(duì)話框類java.applet.Applet組件(component)是具有一定功能、能夠產(chǎn)生事件的

部件的統(tǒng)稱。 例如:窗口,以及窗口上的文本框、按鈕、

復(fù)選框、列表框、菜單等都是組件組件類是Object的子類,是一個(gè)抽象類,是所有組件

的超類,它為其他子類定義了許多共同的屬性,

如:位置、大小、字體、顏色等。

容器(container)是一組特殊的組件,它能容納其他組件容器類是組件類的子類由于容器是組件,所以容器之上還可以再放置其他容

器,這樣就可以創(chuàng)建出復(fù)雜的界面Java中有兩種主要容器:窗口和面板窗口(Window)是可以自由移動(dòng)的,不依賴其他容器

而存在的容器面板(Panel)與窗口類似,但不能獨(dú)立存在,必須包含

在另外一個(gè)容器里,如包含在Frame或Web中窗口(Window)有兩個(gè)主要組件:框架和對(duì)話框在Java應(yīng)用程序中,一般獨(dú)立應(yīng)用程序主要使用框架

(Frame)做容器,在框架上通過(guò)放置面板(Panel)

來(lái)控制圖形界面的布局。如果應(yīng)用到瀏覽器中,則主要使用面板的一個(gè)子類

Applet來(lái)做容器,它能嵌入瀏覽器運(yùn)行。NCEPU抽象窗口工具集AWTjava.awt包中的主要類顏?zhàn)纸M布復(fù)9第一節(jié)

抽象窗口工具集AWT

java.awt包中的主要類以及組件類的繼承關(guān)系顏色類字體類組件類布局類復(fù)選框組類圖像類事件類菜單組件類圖形類java.lang.Object標(biāo)簽類按鈕類容器類復(fù)選框類滾動(dòng)條類選擇框類列表框類文本組件類畫布類面板類窗口類框架類對(duì)話框類文件對(duì)話框類java.applet.AppletPanelFrameContainerComponentNCEPU第一節(jié)抽象窗口工具集AWTjava.awt包中的主要類顏10Swing的類層次結(jié)構(gòu)Swing組件都是AWT的Container類的直接子類或間接子類。

NCEPUSwing的類層次結(jié)構(gòu)Swing組件都是AWT的Contai11Swing的類層次結(jié)構(gòu)ObjectComponentJFrameContainerWindowFrameDialogJDialogJTextJComboBoxJLabelJListJMenuBarJOptionPaneJPanelJScrollBarAbstractButtonJToggleButtonJMenuItemJButtonJCheckBoxJRadioButtonJComponentJMenuAppletJAppletNCEPUSwing的類層次結(jié)構(gòu)ObjectComponentJFra12創(chuàng)建可視化界面的一般步驟選擇外觀布局管理添加組件事件處理

創(chuàng)建容器NCEPU創(chuàng)建可視化界面的一般步驟選擇外觀布局管理添加組件事件處理13Swing外觀Swing采用MVC的設(shè)計(jì)范式Swing外觀感覺(jué)采用可插入的外觀感覺(jué)(PluggableLookandFeel,PL&F)。使得程序在一個(gè)平臺(tái)上運(yùn)行時(shí)能夠有不同的外觀。表示界面數(shù)據(jù)刷新顯示內(nèi)容接收用戶動(dòng)作控制器視圖模型NCEPUSwing外觀Swing采用MVC的設(shè)計(jì)范式Swing外觀感14Metal風(fēng)格Swing外觀

NCEPUMetal風(fēng)格Swing外觀NCEPU15Motif風(fēng)格Swing外觀

NCEPUMotif風(fēng)格Swing外觀NCEPU16Windows風(fēng)格Swing外觀

NCEPUWindows風(fēng)格Swing外觀NCEPU17importjavax.swing.*;importjava.awt.event.*;publicclassHelloWorldSwing{publicstaticvoidmain(String[]args){JFrameframe=newJFrame("HelloWorldSwing");finalJLabellabel=newJLabel("HelloWorld!");frame.getContentPane().add(label);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(200,70);frame.setVisible(true);}}基于Swing的GUI構(gòu)建方法

NCEPUimportjavax.swing.*;基于Swing18(1)引入Swing包及其他程序包importjavax.swing.*;importjava.awt.event.*;(2)設(shè)置外觀風(fēng)格UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());(3)創(chuàng)建并設(shè)置窗口容器(4)創(chuàng)建與添加Swing組件(5)顯示頂層容器基于Swing的GUI構(gòu)建方法

NCEPU(1)引入Swing包及其他程序包基于Swing的GUI構(gòu)建19圖形用戶界面設(shè)計(jì)概述java程序的GUI設(shè)計(jì)主要包括下述三個(gè)概念:組件—Component容器—Container布局管理器--LayoutManagerNCEPU圖形用戶界面設(shè)計(jì)概述java程序的GUI設(shè)計(jì)主要包括下述三個(gè)20Swing中的容器容器分兩類:

-頂級(jí)容器:一般是一個(gè)頂層窗口(框架)。

-中間容器:需要包含在頂層容器中使用的容器。頂級(jí)容器JFrame:用于框架窗口的類,應(yīng)用程序至少使用一個(gè)框架窗口。JDialog:用于對(duì)話框的類。JApplet:用于使用Swing組件的JavaApplet的類。中間容器JPanel:面板,是最靈活、最常用的中間容器。JScrollPane:與JPanel類似,但還可在大的組件或可擴(kuò)展組件周圍提供滾動(dòng)條。JTabbedPane:包含多個(gè)組件,但一次只顯示一個(gè)組件。用戶可在組件之間方便地切換。JToolBar:按行或列排列一組組件(通常是按鈕)。NCEPUSwing中的容器容器分兩類:NCEPU21Swing容器組件主窗口Swing應(yīng)用程序創(chuàng)建容器設(shè)置容器大?。▽?duì)框架及面板而言)設(shè)置容器可見(jiàn)度(對(duì)框架及面板而言)創(chuàng)建頂層容器頂層容器(每個(gè)應(yīng)用程序中至少有一個(gè))內(nèi)容面板主要顯示區(qū)域,包含

GUI中的可視組件NCEPUSwing容器組件主窗口Swing應(yīng)用程序創(chuàng)建容器設(shè)置容22在Java中,頂層窗口稱為框架。窗口有邊界、標(biāo)題、關(guān)閉按鈕等。注意:每個(gè)圖形用戶界面應(yīng)用程序必須有一個(gè)框架框架NCEPU在Java中,頂層窗口稱為框架。窗口有邊界、標(biāo)題、關(guān)閉按鈕等23框架

框架(Frame)類是窗口(Window)類的子類,它是一種帶標(biāo)題框并且可以改變大小的窗口??蚣茴惖脑S多方法是從它的父類Window或更上層的類Container和Component繼承過(guò)來(lái)的下面介紹框架類的構(gòu)造方法和常用方法NCEPU框架框架(Frame)類是窗口(Window)類的子類,它24框架

框架(Frame)類的構(gòu)造方法publicFrame()publicFrame(Stringtitle)

其中,title指定框架的標(biāo)題NCEPU框架框架(Frame)類的構(gòu)造方法NCEPU25框架

組件(Component)類方法publicvoidsetSize(intwidth,intheight)

設(shè)置組件的寬度和高度publicvoidsetVisible(booleanb)

設(shè)置組件是否顯示publicvoidsetLocation(intx,inty)

設(shè)置組件的位置NCEPU框架組件(Component)類方法NCEPU26框架

框架(Frame)類方法publicvoidsetTitle(Stringtitle)

設(shè)置或修改框架的標(biāo)題publicStringgetTitle()

獲取框架的標(biāo)題PublicvoidsetBackground(Colorc)

設(shè)置框架的背景顏色NCEPU框架框架(Frame)類方法NCEPU27框架

框架是一個(gè)帶有標(biāo)題框的窗口,窗口的大小可以改變??蚣茉趯?shí)例化時(shí)默認(rèn)為是不可見(jiàn)的,最小化的,必須通過(guò)setSize方法來(lái)設(shè)定框架的大小,并使用setVisible(true)使框架可見(jiàn)。NCEPU框架框架是一個(gè)帶有標(biāo)題框的窗口,窗口的大小可以改變。NCE28第二節(jié)

框架importjava.awt.*; publicclassUserLogin{

publicstaticvoidmain(Stringargs[]){ Framef=newFrame("UserLogin"); f.setSize(280,150);

f.setBackground(Color.LIGHT_GRAY); f.setVisible(true); }}輸出為:NCEPU第二節(jié)框架importjava.awt.*; 輸出為29importjava.awt.*;publicclassTestMultiFrame{ publicstaticvoidmain(Stringargs[]){ MyFramef1=newMyFrame(100,100,200,200,Color.BLUE); MyFramef2=newMyFrame(300,100,200,200,Color.YELLOW); MyFramef3=newMyFrame(100,300,200,200,Color.GREEN); MyFramef4=newMyFrame(300,300,200,200,Color.MAGENTA); }}NCEPUimportjava.awt.*;NCEPU30classMyFrameextendsFrame{ staticintid=0; MyFrame(intx,inty,intw,inth,Colorcolor){ super("MyFrame"+(++id)); setBackground(color); setLayout(null); setBounds(x,y,w,h); setVisible(true); } }NCEPUclassMyFrameextendsFrame{NC31與AWT組件不同,Swing組件不能直接添加到頂層容器中,它必須添加到一個(gè)與Swing頂層容器相關(guān)聯(lián)的內(nèi)容面板(contentpane)上。getContentPane()JFrame的使用NCEPU與AWT組件不同,Swing組件不能直接添加到頂層容器中,它32對(duì)JFrame添加組件有兩種方式:(1)用getContentPane()方法獲得JFrame的內(nèi)容面板,再對(duì)其加入組件:frame.getContentPane().add(childComponent)如何添加組件NCEPU對(duì)JFrame添加組件有兩種方式:如何添加組件NCEPU33importjavax.swing.*;importjava.awt.event.*;publicclassHelloWorldSwing{publicstaticvoidmain(String[]args){JFrameframe=newJFrame("HelloWorldSwing");finalJLabellabel=newJLabel("HelloWorld!");frame.getContentPane().add(label);

frame.setSize(200,70);frame.setVisible(true);}}NCEPUimportjavax.swing.*;NCEPU34JFrame的使用為了在選擇框架的關(guān)閉按鈕時(shí)能退出程序,應(yīng)添加WindowListener監(jiān)聽(tīng)器或書(shū)寫下列代碼:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

NCEPUJFrame的使用為了在選擇框架的關(guān)閉按鈕時(shí)能退出程序,應(yīng)添35JFrame的使用組件(Component)類方法publicvoidsetLocation(intx,inty)

設(shè)置組件的位置NCEPUJFrame的使用組件(Component)類方法NCEPU36第二節(jié)

框架importjavax.swing.*; publicclassJFrameDemo{

publicstaticvoidmain(Stringargs[]){ JFramefr=newJFrame("學(xué)生信息管理系統(tǒng)"); System.out.println(“已經(jīng)創(chuàng)建JFrame實(shí)例");fr.setSize(400,300);

System.out.println(“調(diào)用了setSize()");

fr.setLocation(200,200); fr.setVisible(true);System.out.println(“調(diào)用了setVisible()");

fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}}NCEPU第二節(jié)框架importjavax.swing.*; 37面板面板(JPanel)與框架類似,也是一種容器,可以容納其他GUI組件。與框架不同的是,面板沒(méi)有標(biāo)題,不能獨(dú)立存在,實(shí)例化以后必須使用Container類的add方法裝入到Window對(duì)象或Frame對(duì)象中,這樣它才可見(jiàn)。NCEPU面板面板(JPanel)與框架類似,也是一種容器,可以容納38Swing常用的容器—JPanelJPanel面板是一種添加到其他容器使用的容器組件。JPanel的構(gòu)造方法:publicJPanel()publicJPanel(LayoutManagerlayout)

JPanel可指定邊界,可用JComponent類的setBorder()方法設(shè)置邊界。其用法如下:

publicvoidsetBorder(Borderborder)NCEPUSwing常用的容器—JPanelJPanel面板是一種添加39第二節(jié)

框架importjava.awt.*;importjavax.swing.*;publicclassFrameWithPanelextendsJFrame{ publicstaticvoidmain(Stringargs[]){ FrameWithPanelfr=newFrameWithPanel("Hello!"); fr.setSize(200,200); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanelpan=newJPanel(); pan.setSize(200,100);NCEPU第二節(jié)框架importjava.awt.*;NCEP40第二節(jié)

框架 pan.setBackground(Color.yellow); pan.setLayout(newGridLayout(2,1)); pan.add(newJButton("確定")); fr.setContentPane(pan); fr.setVisible(true);}publicFrameWithPanel(Stringstr){ super(str); }} NCEPU第二節(jié)框架 pan.setBackground41布局管理器(LayoutManager)所謂布局,就是各組件在容器中如何擺放。為了實(shí)現(xiàn)跨平臺(tái)的特性并獲得動(dòng)態(tài)的布局效果,Java將

容器內(nèi)的所有組件安排給“布局管理器”負(fù)責(zé)管理。布局管理器管理當(dāng)窗口移動(dòng)或調(diào)整大小后組件如何變化

等功能。NCEPU布局管理器(LayoutManager)所謂布局,就是各組件42布局管理器的分類FlowLayout(流式布局):Panel和Applet的缺省布局管理器BorderLayout(邊界布局):JDialog和JFrame的缺省布局管理器GridLayout(網(wǎng)格布局)GridBagLayout(網(wǎng)格組布局)CardLayout(卡片布局)BoxLayout(箱式布局)SpringLayout(彈簧布局)每個(gè)容器都有缺省的布局管理器。在沒(méi)有設(shè)置新的布局前,在容器中添加組件都按照該容器的缺省布局排列??赏ㄟ^(guò)setLayout(LayoutManagerm)方法為容器設(shè)置新布局。布局管理器(LayoutManager)NCEPU布局管理器的分類布局管理器(LayoutManager)NC43布局管理器FlowLayout(流式布局)

將組件逐個(gè)放到容器的一行上

一行放滿后就重新起一個(gè)新行BorderLayout(邊界布局)

容器被劃分為東(East)、南(South)、

西(West)、北(North)、中(Center)NCEPU布局管理器FlowLayout(流式布局)

將組件逐個(gè)放44布局管理器GridLayout(網(wǎng)格式布局)

將容器分為大小相等的若干行乘若干列的網(wǎng)格,組件從左至右,從上到下放入網(wǎng)格中,每個(gè)組件占一格(表格式)CardLayout(卡片式布局)

將容器中的組件處理成一組卡片,每一時(shí)刻只顯示一張卡片,可以在卡片間切換NCEPU布局管理器GridLayout(網(wǎng)格式布局)

45FlowLayout布局管理器FlowLayout布局管理器FlowLayout是Panel類的默認(rèn)布局管理器布局方式:

將組件逐個(gè)地放在容器的一行上,一行放滿就另起一個(gè)新行。

其中,一行的長(zhǎng)度取決于容器的寬度NCEPUFlowLayout布局管理器FlowLayout布局管理46FlowLayout布局管理器FlowLayout布局管理器構(gòu)造方法:publicFlowLayout();publicFlowLayout(intalign);publicFlowLayout(intalign,inthgap,intvgap);其中,align表示對(duì)齊方式,hgap和vagp表示組件的水平和垂直間距,單位是像素。若沒(méi)有指定align,則默認(rèn)讓組件居中擺放align的取值為常量:FlowLayout.LEFT,

FlowLayout.RIGHT和FlowLayout.CENTER例如:newFlowLayout(FlowLayout.LEFT)NCEPUFlowLayout布局管理器FlowLayout布局管理47FlowLayout布局管理器FlowLayout布局管理器設(shè)置FlowLayout布局

FlowLayoutflow=newFlowLayout();

Framefr=newFrame();

fr.setLayout(flow);由于一個(gè)容器只要設(shè)置了布局通常就不會(huì)再改變,因此上面的語(yǔ)句可以簡(jiǎn)化成:

fr.setLayout(newFlowLayout());NCEPUFlowLayout布局管理器FlowLayout布局管理48FlowLayout布局管理器FlowLayout布局管理器可以設(shè)置框架fr為組件左對(duì)齊的FlowLayout布局:

fr.setLayout(newFlowLayout(FlowLayout.LEFT));還可以設(shè)置框架fr為組件左對(duì)齊的FlowLayout布局,并且組件的水平間距為20像素,垂直間距為40像素:

fr.setLayout(newFlowLayout(FlowLayout.LEFT,20,40));NCEPUFlowLayout布局管理器FlowLayout布局管理49importjava.awt.*;importjavax.swing.*;classFlowLayoutDemoextendsJFrame{JButtonjb1,jb2,jb3,jb4,jb5;

publicFlowLayoutDemo(Stringtitle){super(title);}

voidinit(){this.setVisible(true); this.setSize(300,200);Containerc=this.getContentPane();jb1=newJButton("第一個(gè)按鈕");jb2=newJButton("第二個(gè)按鈕");jb3=newJButton("第三個(gè)按鈕");jb4=newJButton("第四個(gè)按鈕");jb5=newJButton("第五個(gè)按鈕");c.setLayout(newFlowLayout());//設(shè)置布局管理器

c.add(jb1);c.add(jb2);c.add(jb3);c.add(jb4);c.add(jb5);}

publicstaticvoidmain(String[]args){FlowLayoutDemof=newFlowLayoutDemo("FowLayoutDemo"); f.init();}}

FlowLayout使用示例NCEPUimportjava.awt.*;FlowLayout使用50BorderLayout布局管理器BorderLayout布局管理器BorderLayout是Frame類和Dialog類的默認(rèn)布局管理器布局方式:

容器被劃分為東(East)、南(South)、

西(West)、北(North)、中(Center)五個(gè)區(qū)域變化規(guī)律為:組件的相對(duì)位置不變,大小發(fā)生變化。NCEPUBorderLayout布局管理器BorderLayout51水平拉寬我們可以看到:南、北、中控件大小會(huì)有變化,東、西控件大小不變化。BorderLayout布局管理器BorderLayout布局管理器NCEPU水平拉寬我們可以看到:南、北、中控件大小會(huì)有變化,東、西控件52上下拉長(zhǎng)可以看到:東、西、中控件大小會(huì)有變化,南、北控件大小不變化。BorderLayout布局管理器BorderLayout布局管理器NCEPU上下拉長(zhǎng)可以看到:東、西、中控件大小會(huì)有變化,南、北控件大小53BorderLayout布局管理器BorderLayout布局管理器構(gòu)造方法:publicBorderLayout();publicBorderLayout(inthgap,intvgap);其中,hgap和vagp表示組件的水平和垂直間距,單位是像素,默認(rèn)為0NCEPUBorderLayout布局管理器BorderLayout54BorderLayout布局管理器BorderLayout布局管理器Container容器類放置組件的方法:

publicComponentadd(Componentcomp,intindex)

其中,index指明組件放置的區(qū)域,分別為:

BorderLayout.EAST或"East"

BorderLayout.WEST或"West"

BorderLayout.SOUTH或"South"

BorderLayout.NORTH或"North"

BorderLayout.CENTER或"Center"NCEPUBorderLayout布局管理器BorderLayo55importjava.awt.*;importjavax.swing.*;classBLExampleextendsJFrame{

publicBLExample(Stringtitle){super(title);ContainercontentPane=getContentPane();

contentPane.setLayout(newBorderLayout(2,2));contentPane.add(BorderLayout.NORTH,newJButton("North"));contentPane.add(BorderLayout.SOUTH,newJButton("South"));contentPane.add(BorderLayout.EAST,newJButton("East"));contentPane.add(BorderLayout.WEST,newJButton("West"));contentPane.add(BorderLayout.CENTER,newJButton("Center"));

}publicstaticvoidmain(Stringargs[]){BLExampleframe=newBLExample("Example");frame.setDefaultCloseOperation(EXIT_ON_CLOSE);frame.setSize(500,300);frame.setVisible(true);}}NCEPUimportjava.awt.*;NCEPU56第四節(jié)布局管理器importjavax.swing.*; publicclassExGui2{

privateJFramef; privateJButtonbe,bs,bw,bn,bc;

publicstaticvoidmain(Stringargs[]){ ExGui2that=newExGui2(); that.go(); }

NCEPU第四節(jié)布局管理器importjavax.swing.57第四節(jié)布局管理器

voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center"); f.add(be,"East"); f.add(bs,"South"); f.add(bw,"West"); f.add(bn,"North"); f.add(bc,"Center"); f.setSize(350,200); f.setVisible(true);} }輸出為:NCEPU第四節(jié)布局管理器 voidgo(){輸出為:N58第四節(jié)布局管理器

voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center"); f.add(be,"East"); f.add(bs,"South"); f.add(bw,"West"); f.add(bn,"North"); f.add(bc,"Center"); f.setSize(350,200); f.setVisible(true);} }

voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center"); f.add(be,BorderLayout.EAST); f.add(bs,BorderLayout.SOUTH); f.add(bw,BorderLayout.WEST); f.add(bn,BorderLayout.NORTH); f.add(bc,BorderLayout.CENTER); f.setSize(350,200); f.setVisible(true);} }Frame類默認(rèn)的布局管理器就是BorderLayout因此不用再使用f.setLayout(newBorderLayout())區(qū)域的默認(rèn)值是BorderLayout.CENTER因此f.add(bc,BorderLayout.CENTER)與 f.add(bc)是等價(jià)的。若將多個(gè)組件放在了同一個(gè)區(qū)域內(nèi),最后一個(gè)放入的組件將覆蓋前面的組件NCEPU第四節(jié)布局管理器 voidgo(){ void59第四節(jié)布局管理器

voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center"); f.add(be,"East"); f.add(bs,"East"); f.add(bw,"North"); f.add(bn,"North"); f.add(bc); f.setSize(350,200); f.setVisible(true);} }若將多個(gè)組件放在了同一個(gè)區(qū)域內(nèi),最后一個(gè)放入的組件將覆蓋前面的組件輸出為:NCEPU第四節(jié)布局管理器 voidgo(){若將多個(gè)組60第四節(jié)布局管理器

voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center"); f.add(be,"East"); f.add(bs,"South"); f.add(bw,"West"); f.add(bn,"North"); f.add(bc,"Center"); f.setSize(350,200); f.setVisible(true);} }對(duì)于East、South、West、North四個(gè)邊界區(qū)域,若其中的某個(gè)區(qū)域沒(méi)有放置組件,則這個(gè)區(qū)域?qū)⒆優(yōu)?,同時(shí)Center區(qū)域的組件將會(huì)擴(kuò)展到這個(gè)區(qū)域NCEPU第四節(jié)布局管理器 voidgo(){對(duì)于Eas61第四節(jié)布局管理器

voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center");

//f.add(be,"East");

f.add(bs,"South"); f.add(bw,"West");

//f.add(bn,"North"); f.add(bc,"Center"); f.setSize(350,200); f.setVisible(true);} }對(duì)于East、South、West、North四個(gè)邊界區(qū)域,若其中的某個(gè)區(qū)域沒(méi)有放置組件,則這個(gè)區(qū)域?qū)⒆優(yōu)?,同時(shí)Center區(qū)域的組件將會(huì)擴(kuò)展到這個(gè)區(qū)域輸出為:NCEPU第四節(jié)布局管理器 voidgo(){對(duì)于Eas62第四節(jié)布局管理器

voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center"); f.add(be,"East");

//f.add(bs,"South");

//f.add(bw,"West"); f.add(bn,"North"); f.add(bc,"Center"); f.setSize(350,200); f.setVisible(true);} }對(duì)于East、South、West、North四個(gè)邊界區(qū)域,若其中的某個(gè)區(qū)域沒(méi)有放置組件,則這個(gè)區(qū)域?qū)⒆優(yōu)?,同時(shí)Center區(qū)域的組件將會(huì)擴(kuò)展到這個(gè)區(qū)域輸出為:NCEPU第四節(jié)布局管理器 voidgo(){對(duì)于Eas63第四節(jié)布局管理器

voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center"); f.add(be,"East");

//f.add(bs,"South");

//f.add(bw,"West"); f.add(bn,"North"); f.add(bc,"Center"); f.setSize(350,200); f.setVisible(true);} }對(duì)于East、South、West、North四個(gè)邊界區(qū)域,若其中的某個(gè)區(qū)域沒(méi)有放置組件,則這個(gè)區(qū)域?qū)⒆優(yōu)?,同時(shí)Center區(qū)域的組件將會(huì)擴(kuò)展到這個(gè)區(qū)域若四個(gè)邊界區(qū)域都沒(méi)有組件,則Center區(qū)域的組件將充滿整個(gè)容器NCEPU第四節(jié)布局管理器 voidgo(){對(duì)于Eas64第四節(jié)布局管理器

voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center");

//f.add(be,"East"); //f.add(bs,"South"); //f.add(bw,"West"); //f.add(bn,"North"); f.add(bc,"Center"); f.setSize(350,200); f.setVisible(true);} }若四個(gè)邊界區(qū)域都沒(méi)有組件,則Center區(qū)域的組件將充滿整個(gè)容器輸出為:NCEPU第四節(jié)布局管理器 voidgo(){若四個(gè)邊界65第四節(jié)布局管理器

voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center");

//f.add(be,"East"); //f.add(bs,"South"); //f.add(bw,"West"); //f.add(bn,"North"); f.add(bc,"Center"); f.setSize(350,200); f.setVisible(true);} }若四個(gè)邊界區(qū)域都沒(méi)有組件,則Center區(qū)域的組件將充滿整個(gè)容器對(duì)于Center區(qū)域,如果不放置組件,則容器中間將會(huì)空白,邊界區(qū)域的組件不會(huì)擴(kuò)展過(guò)來(lái)NCEPU第四節(jié)布局管理器 voidgo(){若四個(gè)邊界66第四節(jié)布局管理器

voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center"); f.add(be,"East"); f.add(bs,"South"); f.add(bw,"West");

f.add(bn,"North");

//f.add(bc,"Center"); f.setSize(350,200); f.setVisible(true);} }對(duì)于Center區(qū)域,如果不放置組件,則容器中間將會(huì)空白,邊界區(qū)域的組件不會(huì)擴(kuò)展過(guò)來(lái)輸出為:NCEPU第四節(jié)布局管理器 voidgo(){對(duì)于Cen67第四節(jié)布局管理器

voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center"); f.add(be,"East"); f.add(bs,"South"); f.add(bw,"West");

f.add(bn,"North"); f.add(bc,"Center"); f.setSize(550,300); f.setVisible(true);} }當(dāng)容器大小發(fā)生改變的時(shí)候,各組件的大小也發(fā)生變化。但不管容器大小如何改變,North和South區(qū)域的高度保持不變,East和West區(qū)域的寬度保持不變輸出為:NCEPU第四節(jié)布局管理器 voidgo(){當(dāng)容器大小68第四節(jié)布局管理器

voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center"); f.add(be,"East"); f.add(bs,"South"); f.add(bw,"West");

f.add(bn,"North"); f.add(bc,"Center"); f.setSize(550,300); f.setVisible(true);} }當(dāng)容器大小發(fā)生改變的時(shí)候,各組件的大小也發(fā)生變化。但不管容器大小如何改變,North和South區(qū)域的高度保持不變,East和West區(qū)域的寬度保持不變因此,實(shí)際上真正變化的主要是Center區(qū)域的組件將隨容器的大小變化而變化。NCEPU第四節(jié)布局管理器 voidgo(){當(dāng)容器大小69第四節(jié)布局管理器

voidgo(){ f=newJFrame("BorderLayout"); be=newJButton("East"); bs=newJButton("South"); bw=newJButton("West"); bn=newJButton("North"); bc=newJButton("Center"); f.add(be,"East"); f.add(bs,"South"); f.add(bw,"West");

f.add(bn,"North"); f.add(bc,"Center"); f.setSize(350,200); f.setVisible(true);} }可以使用BorderLayout的構(gòu)造方法來(lái)設(shè)置各個(gè)區(qū)域組件的間距。例如,在程序中加入:

f.setLayout(newBorderLayout(10,20))輸出為:NCEPU第四節(jié)布局管理器 voidgo(){可以使用B70布局管理器3.GridLayout布局管理器布局方式:

這是一種網(wǎng)格式布局,它將容器分為大小相等的若干行和若干列的網(wǎng)格,組件從左至右從上到下依次放入網(wǎng)格中,每個(gè)組件占一格

實(shí)際上,這種布局方式就是一個(gè)表格NCEPU布局管理器3.GridLayout布局管理器NCEPU71使容器中的各組件呈網(wǎng)格狀分布。各組件的排列方式為:從上到下,從左到右。組件放入容器的次序決定了它在容器中的位置。網(wǎng)格每列寬度相同,等于容器的寬度除以網(wǎng)格的列數(shù)。網(wǎng)格每行高度相同,等于容器的高度除以網(wǎng)格的行數(shù)。容器大小改變時(shí),組件的相對(duì)位置不變,大小會(huì)改變。若組件數(shù)超過(guò)網(wǎng)格設(shè)定的個(gè)數(shù),則布局管理器會(huì)自動(dòng)增加網(wǎng)格個(gè)數(shù),原則是保持行數(shù)不變。布局管理器NCEPU使容器中的各組件呈網(wǎng)格狀分布。布局管理器NCEPU72布局管理器3.GridLayout布局管理器構(gòu)造方法:publicGridLayout();publicGridLayout(introws,intcols);publicGridLayout(introws,intcols,

inthgap,intvgap);

其中,rows和cols表示行數(shù)和列數(shù);hgap和vagp表示組件的水平和垂直間距,單位是像素,默認(rèn)為0當(dāng)沒(méi)有rows和cols時(shí),將構(gòu)造一個(gè)只有一行的網(wǎng)格,列數(shù)由組件的個(gè)數(shù)而定NCEPU布局管理器3.GridLayout布局管理器其中,73importjava.awt.*; classGridEx

{

privateJFramef; privateJButtonb1,b2,b3,b4,b5;

publicstaticvoidmain(Stringargs[]){ GridExthat=newGridEx(); that.go(); }

voidgo()

{ f=newJFrame("GridLayout"); f.setLayout(newGridLayout(3,2)); NCEPUimportjava.awt.*; NCEPU74

b1=newJButton("b1"); b2=newJButton("b2"); b3=newJButton("b3"); b4=newJButton("b4"); b5=newJButton("b5"); f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5);

f.setSize(200,200);

f.setVisible(true);} }NCEPU b1=newJButton("b1");NC75importjava.awt.*; classGridEx

{

privateJFramef; privateJButtonb1,b2,b3,b4,b5;

publicstaticvoidmain(Stringargs[]){ GridExthat=newGridEx(); that.go(); }

voidgo()

{ f=newJFrame("GridLayout"); f.setLayout(newGridLayout(2,2)); 若放置的組件超過(guò)網(wǎng)格設(shè)定的個(gè)數(shù),則布局管理器會(huì)自動(dòng)增加網(wǎng)格個(gè)數(shù),原則是保持行數(shù)不變NCEPUimportjava.awt.*; 若放置的組件超過(guò)網(wǎng)格設(shè)76importjava.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)格布局示例NCEPUimportjava.awt.*;網(wǎng)格布局示例NCEPU77在實(shí)際應(yīng)用中,網(wǎng)格布局(有時(shí)僅僅一行或者一列)在組織窗口的局部區(qū)域比較有用。網(wǎng)格布局應(yīng)用添加修改刪除查詢統(tǒng)計(jì)如果需要一行或多行相同尺寸的按鈕,那么可以把按鈕放在一個(gè)面板里,該面板使用網(wǎng)格布局進(jìn)行管理。NCEPU在實(shí)際應(yīng)用中,網(wǎng)格布局(有時(shí)僅僅一行或者一列)在組織窗口的局78卡片式布局—CardLayout將容器中的組件處理為一系列卡片。每一時(shí)刻只顯示其中的一張??梢栽诳ㄆg進(jìn)行切換。CardLayout—卡片式布局管理器NCEPU卡片式布局—CardLayoutCardLayout—卡片式79構(gòu)造方法publicCardLayout();

組件距容器左右邊界和上下邊界的距離為缺省值0個(gè)象素。publicCardLayout(inthgap,intvgap);

組件距容器左右邊界和上下邊界的距離為指定值。CardLayout—卡片式布局管理器NCEPU構(gòu)造方法CardLayout—卡片式布局管理器NCEPU80

向容器中添加組件的方法

Container.add(Component,String);

如:f.add(p1,"First");采用CardLayout布局方式時(shí),向容器中添加組件時(shí)可以為組件取一個(gè)名字,以供更換顯示組件時(shí)使用。CardLayout—卡片式布局管理器NCEPU向容器中添加組件的方法如:f.add(p1,"Fi81

其他常用方法publicvoidshow(Containerparent,Stringname)publicvoidnext(Containerparent)publicvoidprevious(Containerparent)publicvoidfirst(Containerparent)publicvoidlast(Containerparent)其中,Container是擁有該CardLayout布局管理器的容器。

myCardLayout.show(f,"First");CardLayout—卡片式布局管理器NCEPU其他常用方法CardLayout—卡片式布局管理器NCE82與BorderLayout類和GridLayout類相類似,每張卡片中只能放置一個(gè)組件,如果想在一張卡片中放置多個(gè)組件,則必須先在該卡片中放一個(gè)容器,再將多個(gè)組件放在該容器中。CardLayout—卡片式布局管理器NCEPU與BorderLayout類和GridLayout類83importjava.awt.*; importjava.awt.event.*;importjavax.swing.*;classCardTestextendsMouseAdapter{ JPanelp1,p2,p3; JLabell1,l2,l3; CardLayoutmyCard; JFramef; Containerc;

publicstaticvoidmain(Stringargs[]){ CardTestct=newCardTest(); ct.init(); }NCEPUimportjava.awt.*; NCEPU84

publicvoidinit(){f=newJFrame("CardTest"); myCard=newCardLayout(); f.setLayout(myCard); p1=newJPanel(); p2=newJPanel(); p3=newJPanel();

l1=newJLabel("ThisisthefirstPanel"); p1.add(l1); p1.setBackground(Color.yellow);l2=newJLabel("Thisisthe2ndPanel"); p2.add(l2); p2.setBackground(Color.green);l3=newJLabel("Thisisthe3rdPanel"); p3.add(l3); p3.setBackground(Color.magenta);NCEPU publicvoidinit()NCEPU85 c=f.getContentPane();

c.add(p1,"First"); c.add(p2,"Second"); c.add(p3,"Third"); myCard.show(c,"First"); f.setSize(300,200); f.setVisible(true);p1.addMouseListener(this); p2.addMouseListener(this); p3.addMouseListener(this);

}

publicvoidmouseClicked(MouseEvente)

{ myCard.next(c);}}NCEPU c=f.getContentPane();NCEPU86importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;public

classCardLayoutWindowextendsJFrameimplementsActionListener{JPanelcards;CardLayoutCLayout=newCardLayout();NCEPUimportjava.awt.*;NCEPU87publicCardLayoutWindow(){setLayout(newBorderLayout());//創(chuàng)建擺放"卡片切換"按鈕的panel,并添加到Frame中。JPanelcp=newJPanel();JButtonbt=newJButton("卡片切換");bt.addActionListener(this);cp.add(bt);add(“North”,cp);//創(chuàng)建承放多個(gè)卡片的Panel,設(shè)置為CardLayout。

cards=newJPanel();cards.setLayout(CLayout);//創(chuàng)建cards中的第一個(gè)panel及其組件。

JPanelp1=newJPanel();p1.add(newJButton("Button1"));p1.add(newJButton("Button2"));p1.add(newJButton("Button3"));NCEPUpublicCardLayoutWindow(){

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論