![《Java程序設(shè)計(jì)與案例》課件 第5章 圖形用戶界面_第1頁](http://file4.renrendoc.com/view/e65b0d392f53053c24460b59159313d0/e65b0d392f53053c24460b59159313d01.gif)
![《Java程序設(shè)計(jì)與案例》課件 第5章 圖形用戶界面_第2頁](http://file4.renrendoc.com/view/e65b0d392f53053c24460b59159313d0/e65b0d392f53053c24460b59159313d02.gif)
![《Java程序設(shè)計(jì)與案例》課件 第5章 圖形用戶界面_第3頁](http://file4.renrendoc.com/view/e65b0d392f53053c24460b59159313d0/e65b0d392f53053c24460b59159313d03.gif)
![《Java程序設(shè)計(jì)與案例》課件 第5章 圖形用戶界面_第4頁](http://file4.renrendoc.com/view/e65b0d392f53053c24460b59159313d0/e65b0d392f53053c24460b59159313d04.gif)
![《Java程序設(shè)計(jì)與案例》課件 第5章 圖形用戶界面_第5頁](http://file4.renrendoc.com/view/e65b0d392f53053c24460b59159313d0/e65b0d392f53053c24460b59159313d05.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
圖形用戶界面設(shè)計(jì)1主要內(nèi)容Java的GUI簡介自定義圖形設(shè)計(jì)圖形、文字、圖象Java的標(biāo)準(zhǔn)組件容器和組件GUI的布局事件處理2圖形用戶界面〔GUI〕字符界面用字符串、命令行的方式與用戶交互圖形用戶界面:GraphicsUserInterface用直觀的圖形來表示數(shù)據(jù)用直觀、方便的GUI標(biāo)準(zhǔn)組件來接收命令GUI組成成分的標(biāo)準(zhǔn)化使用圖形的方式借助菜單、按鈕等標(biāo)準(zhǔn)界面元素和鼠標(biāo)操作,來幫助用戶方便地向計(jì)算機(jī)系統(tǒng)發(fā)出命令,啟動(dòng)操作,并將系統(tǒng)運(yùn)行的結(jié)果同樣以圖形的方式顯示給用戶。3用戶界面設(shè)計(jì)原那么控制權(quán)在用戶界面與操作的風(fēng)格一致性寬容〔容錯(cuò)〕性簡潔與美觀并重4圖形用戶界面簡介圖形用戶界面的構(gòu)成容器:布局、安排標(biāo)準(zhǔn)組件用戶自定義成分設(shè)計(jì)&實(shí)現(xiàn)圖形用戶界面的工作創(chuàng)立GUI各組成成分,并安排附屬位置關(guān)系,根據(jù)具體需要對其進(jìn)行排序,構(gòu)成完整外觀。定義GUI各成分對不同事件的響應(yīng),實(shí)現(xiàn)與用戶的交互功能。5界面構(gòu)成容器用戶自定義成分容器是用來組織其他界面成分和元素的單元。一般一個(gè)圖形用戶界面對應(yīng)一個(gè)復(fù)雜容器。如一窗口標(biāo)準(zhǔn)組件是圖形用戶界面的最小單位,它里面不再包含其他的成分。如單項(xiàng)選擇按鈕,文本框,菜單用戶自定義成分是指編程人員根據(jù)用戶需要設(shè)計(jì)一些用戶自定義的圖形界面成分。如繪制幾何圖形標(biāo)準(zhǔn)組件6界面元素容器是用來組織其他界面成分和元素的單元。可以形成容器的層次,構(gòu)筑復(fù)雜結(jié)構(gòu)Window〔Frame、Applet、Dialog〕組件是圖形用戶界面的根本單位,它里面不再包含其他的成分。GUI組件是圖形用戶界面標(biāo)準(zhǔn)化的結(jié)果。常用的組件有:選擇類的:單項(xiàng)選擇按鈕、復(fù)選按鈕、下拉列表;文字處理類的:文本框、文本區(qū)域命令類的:按鈕、菜單等GUI組件的作用是完成與用戶的交互。包括接收用戶的命令、文本或選擇輸入,向用戶顯示一段文本或一個(gè)圖形等。7界面元素使用組件通常需要如下的步驟創(chuàng)立某組件類的對象,指定其大小等屬性。使用某種布局策略,將該組件對象參加到某個(gè)容器中的某指定位置處。將該組件對象注冊給它所能產(chǎn)生的事件對應(yīng)的事件監(jiān)聽者,重載事件的處理方法,實(shí)現(xiàn)利用該組件對象與用戶交互的功能。用戶自定義成分顯示文字、繪制圖形、顯示圖象…不能像標(biāo)準(zhǔn)組件一樣被系統(tǒng)識(shí)別和成認(rèn),只起裝飾作用。不能響應(yīng)用戶的動(dòng)作,不具有交互功能。8圖形用戶界面〔GUI〕Java的圖形用戶界面編程:為方便圖形用戶界面的開發(fā),設(shè)計(jì)了專門的類庫來生成各種標(biāo)準(zhǔn)圖形界面元素和處理圖形界面的各種事件,這個(gè)用來生成圖形界面的類庫就是java.awt包。AWT是abstractwindowtoolkit抽象窗口工具集的縮寫。AWT類庫中的各種操作被定義在一個(gè)窗口中進(jìn)行,開發(fā)人員用AWT開發(fā)出的圖形用戶界面可以適用于所有的平臺(tái)系統(tǒng)。9AWT包AbstractWindowToolkit(抽象窗口工具集)提供各種構(gòu)成GUI的標(biāo)準(zhǔn)構(gòu)件。AWT類庫中的各種操作被定義在一個(gè)窗口中進(jìn)行的。抽取不同軟硬件平臺(tái)中所實(shí)現(xiàn)的窗口的公共特性。依賴于具體平臺(tái)系統(tǒng)實(shí)現(xiàn):顯示效果可能不同。提供與機(jī)器無關(guān)的根本GUI標(biāo)準(zhǔn)組件選擇類組件:單項(xiàng)選擇按鈕、復(fù)選框、下拉選單、列表框文字處理類組件:標(biāo)簽、文本框、編輯框。命令類組件:按鈕、工具欄、菜單等。10從一個(gè)簡單窗口開始創(chuàng)立GUI應(yīng)用程序Frame必不可少它是帶標(biāo)題的頂層窗口,是構(gòu)建應(yīng)用程序圖形界面的根底,它為應(yīng)用程序?qū)崿F(xiàn)人機(jī)交互提供了對話窗口先來建一個(gè)空的窗口應(yīng)用:Empty.java注意:一定要處理關(guān)閉窗口的事件11importjava.awt.*;//mustimporttouseGUI//mustextendsFrameinanapplicationpublicclassEmptyextendsFrame{//暫時(shí)采用1.0.2的事件處理方法,關(guān)閉窗口
publicbooleanhandleEvent(Eventevt){
//根據(jù)Event類中參數(shù)evt的id值來判斷發(fā)生事件的種類
if(evt.id==Event.WINDOW_DESTROY) System.exit(0);
//
return的返回值表示將余下的事件處理交給handleEvent()的父
//類處理,從而保證對事件的正常處理
returnsuper.handleEvent(evt);}publicstaticvoidmain(String[]args){ Framef=newEmpty(); f.setSize(300,200); f.setVisible(true);}}12繪制用戶自定義成分用戶自定義成分屬于構(gòu)成GUI的非標(biāo)準(zhǔn)局部無法響應(yīng)用戶事件一般僅僅起背景裝飾、輸出效果突出的作用Java中的用戶自定義成分顯示文字繪制圖形顯示圖片13繪制用戶自定義成分一般在容器中(窗口)或畫布上繪制。利用Java.awt類庫中的類及其方法繪制用戶自定義的圖形界面成分。Graphics類包含很多繪制圖形和文字的方法。首先要獲得Graphics類的實(shí)例,然后利用其方法繪制。Graphics類的實(shí)例一般作為相關(guān)方法的參數(shù)傳遞進(jìn)來:
paint(Graphicsg)Java程序圖形界面的坐標(biāo)設(shè)置原點(diǎn)(0,0)X軸Y軸14繪制圖形及其相關(guān)方法drawLine(x1,y1,x2,y2)//直線drawRect(x,y,w,h)//矩形drawOval(x,y,w,h)//圓或橢圓fillOval(x,y,w,h)//實(shí)心圓或橢圓drawPolygon(X坐標(biāo)數(shù)組,Y坐標(biāo)數(shù)組,頂點(diǎn)個(gè)數(shù))//畫多邊形drawArc(x,y,w,h,開始角度,弧度角度)setColor(Colorc)//設(shè)置顏色setFont(Fontf)//設(shè)置字體getColor()getFont()15繪制圖形及其相關(guān)方法從(x1,y1)到(x2,y2)畫直線drawLine(x1,y1,x2,y2)參數(shù)均為int畫弧線drawArc(x,y,w,h,,)參數(shù)均為intx,y為繪制弧形的左上角的坐標(biāo);w,h為弧形的寬度和高度;為弧形的起始角,為弧形的弧度,為正,表順時(shí)針方向;為負(fù),表逆時(shí)針方向。以(x,y)為左上角、w為寬度、h為高度畫矩形drawRect(x,y,w,h)參數(shù)均為intfillRect(x,y,w,h)、clearRect(x,y,w,h)16繪制圖形及其相關(guān)方法畫圓或橢圓drawOval(x,y,w,h)x,y為繪制圓或橢圓的左上角的坐標(biāo),w,h確定了橢圓的寬度和高度畫實(shí)心圓或橢圓fillOval(x,y,w,h)畫多邊形drawPolygon(X坐標(biāo)數(shù)組,Y坐標(biāo)數(shù)組,頂點(diǎn)個(gè)數(shù))
P.18517繪制圖形及其相關(guān)方法例子:
sanmao.java18
//畫頭部,橢圓方法drawOvalg.setColor(Color.black);//setColor用來設(shè)置要使用的顏色
g.drawOval(40,40,120,150); ……...//畫頭發(fā),直線方法drawLine,畫弧方法drawArcg.drawLine(100,10,100,60);g.drawArc(110,20,100,80,90,90); ……...//畫嘴巴,填充畫弧方法fillArcg.fillArc(60,130,80,40,180,180); ……...//畫耳朵,填充橢圓方法fillOval,復(fù)制圖形方法copyAreag.fillOval(25,92,15,30);g.copyArea(25,92,15,30,136,0);//拷貝某區(qū)域的圖形至另一區(qū)域 ……...//畫身體,多邊形方法fillPolygong.fillPolygon(polygon_x,polygon_y,polygon_pt_num);19顯示文字字體顯示效果類:Font一個(gè)Font類的對象表示了一種字體顯示效果,包括字體類型、風(fēng)格和字號。Fontmf=newFont(String字體,int風(fēng)格,int字號);字體:TimesRoman,Courier,Arial等風(fēng)格:三個(gè)常量Font.PLAIN,Font.BOLD,Font.ITALIC字號:字的大小〔磅數(shù)〕設(shè)置當(dāng)前使用的字體:setFont(Fontfn)獲取當(dāng)前使用的字體:getFont()例:UseFonts.java20StringFontName[]={"TimesRoman","Courier","Arial"};intFontStyle[]={Font.PLAIN,Font.BOLD,Font.ITALIC};StringStyleName[]={"PLAIN","BOLD","ITALIC"};publicvoidpaint(Graphicsg){for(inti=0;i<3;i++){ for(intj=0;j<3;j++){//setanewfontanddrawastringwiththenewfont g.setFont(newFont(FontName[i],FontStyle[j],12)); g.drawString("ABEXYZ "+FontName[i]+""+ StyleName[j],10,20*(i*3+j+2)); }}}//endofpaint21paint()與update()某組件的paint()和
update()為系統(tǒng)自動(dòng)調(diào)用的有關(guān)圖形繪制的方法,不可人為編程調(diào)用;但可編程重新定義其操作內(nèi)容使用repaint()方法可以觸發(fā)update()方法paint()當(dāng)某些操作破壞了顯示,需重新繪制時(shí)第一次繪制repaint()編程控制1.擦除并填充成背景色2.調(diào)用paint()update()調(diào)用22顯示圖象圖形與圖象,java支持gif和jpeg格式保存二進(jìn)制圖象的類獲取Image對象的方法getImage(圖象文件所在的URL)getImage(圖象文件所在的URL,圖象文件名)Applet類以及中均有方法的定義注意:在application中只能使用Toolkit,而在Applet中,兩者均可使用23顯示圖象在applet小程序中,可使用Applet類的getImage方法獲得圖象。Imageig=getImage(…)而在application中就只能使用ToolKit類的getImage方法:Imageig=getToolkit().getImage(“文件名〞);然后用Graphics類的drawImage方法顯示Image對象。24顯示圖象顯示圖象的方法
drawImage(Image對象,
x,y,背景色,ImageObserver);類中定義了此方法第一個(gè)參數(shù)是保存圖像數(shù)據(jù)的Image對象。第二、三個(gè)參數(shù)是圖像的左上角坐標(biāo),它們決定了圖像在容器中的顯示位置。ImageObserver為一個(gè)接口,java的組件類實(shí)現(xiàn)了此接口,此處可理解為觀察/顯示Image對象容器,編程時(shí)一般可使用this,用于提示圖象是否加載完成25顯示圖象表示顏色的類Color顯示的字符串或圖形的顏色可以用Color類的對象來控制,每個(gè)Color對象代表一種顏色,用戶可以直接使用Color類中定義好的顏色常量,也可以通過調(diào)配紅、綠、藍(lán)三色的比例創(chuàng)立自己的Color對象Color(red,green,blue)來創(chuàng)立非缺省色調(diào)用Graphics對象的setColor()方法可把當(dāng)前的缺省顏色改成新建的顏色ColorblueColor=newColor(0,0,255);g.setColor(blueColor); P.18926Color類構(gòu)造方法1〔設(shè)置顏色〕Colorc=newColor(int
red,int
green,int
blue)范圍:0~255newColor(200,200,200)newColor(255,0,100)構(gòu)造方法2Colorc=newColor(float
red,float
green,float
blue)范圍:0.0~1.0Color類定義了13種顏色常量值Color.black,Color.blue,Color.gray,Color.red…...對GUI的組件有四種與顏色相關(guān)的方法來設(shè)置和獲取其背景色和前景色:setBackground(Colorc);getBackground();setForeground();getForeground();27例:DrawMyImage.java
publicclassDrawMyImageextendsFrame{
//獲得Toolkit實(shí)例的方法getDefaultToolkit()Toolkittoolkit=Toolkit.getDefaultToolkit();ImagemyImage;
publicDrawMyImage(){
//獲得Image對象,圖象文件在當(dāng)前目錄下時(shí)
myImage=toolkit.getImage("Invntory.gif");}
//在paint方法中繪制圖象
publicvoidpaint(Graphicsg){ g.drawImage(myImage,0,40,Color.orange,this);}……………..}28GUI標(biāo)準(zhǔn)組件概述構(gòu)建程序的圖形用戶界面的主要任務(wù)有兩個(gè)創(chuàng)立各界面組件并排列成圖形用戶界面的外觀定義這些組件對不同事件的影響從而完成圖形用戶界面功能組成圖形用戶界面的成分有三類用戶自定義類容器:是能夠容納并排列其他組件的對象組件:放置在容器中的對象在Java中,容器和組件是由AWT包中的對象來代表,這些對象間的層次關(guān)系如以下圖:29AWT類層次關(guān)系圖MenuComponentMenuMenuItemMenuBarComponent
Container
Panel
Applet
Window
Frame
DialogButtonTextFieldTextAreaTextComponentCheckbox其他組件30GUI標(biāo)準(zhǔn)組件概述根本組件被安放在容器中的某位置,用來完成一種具體的與用戶交互的功能,使用根本組件一般包括如下的步驟創(chuàng)立某種根本組件類的新對象,指定該對象的屬性比方:外觀、大小等將該組件對象參加到某個(gè)容器的適宜位置創(chuàng)立該組件對象的監(jiān)聽者,即實(shí)現(xiàn)以該組件為事件源的事件對應(yīng)的監(jiān)聽者接口,也可以使現(xiàn)有的類實(shí)現(xiàn)該接口成為監(jiān)聽者。將該組件對象注冊給此監(jiān)聽者,并在監(jiān)聽者內(nèi)部實(shí)現(xiàn)監(jiān)聽者接口中定義的方法,對該組件可能引發(fā)的事件加以處理,定義新參加組件對象的交互性界面功能。比方:接收用戶輸入的文本、在屏幕顯示輸出等31GUI標(biāo)準(zhǔn)組件Component:所有組件和容器的抽象父類顯示功能:paint(),update(),repaint()顯示效果控制:字體、顏色、位置、尺寸圖象處理:一般利用Canvas和Container來顯示圖像事件處理機(jī)制〔java1.1〕:addXXXListener()removeXXXListener()32Component類可顯示在屏幕上的圖形對象,可與用戶交互。是所有組件和容器的抽象父類,其中定義了一些每個(gè)容器和組件都可能用到的方法。add(PopupMenu
popup)在組件上參加一彈出菜單addFocusListener(FocusListener
l)將發(fā)生在本組件上的事件注冊給監(jiān)聽者,以進(jìn)行事件處理。setSize(int
width,int
height)設(shè)置組件尺寸repaint(intx,inty,int
width,int
height)重畫組件setFont(Font
f)設(shè)置組件字體setBackground(Color
c)設(shè)置組件背景色setVisible(booleanb)設(shè)置組件是否可見33GUI標(biāo)準(zhǔn)組件簡單構(gòu)件:人機(jī)交互的根本工具(控制)Button,Checkbox,Label等TextComponent(TextArea,TextField)Canvas復(fù)雜構(gòu)件:Container(安放排列其他構(gòu)件的容器)PanelWindow34Container〔容器〕排列其中包容的構(gòu)件定位布局策略set/getLayout()包容其他根本構(gòu)件增加構(gòu)件:add()刪除構(gòu)件:remove()控制是否顯示容器及其中組件setVisible(true/false)35Container容器組件Window—無邊框、菜單的空白窗口。不需要其他組件支撐,獨(dú)立顯示。Frame:用于Application,含邊框、標(biāo)題和菜單的獨(dú)立窗口Dialog:依賴于Frame的非獨(dú)立窗口。沒有菜單條,不能改變大小。Panel(面板)—屬于無邊框容器。必須放在Window組件中(或Web瀏覽器窗口)才能顯示。它為一矩形區(qū)域,在其中可擺放其他組件,可以有自己的布局管理器。無邊框容器包括Panel和Applet。其中Applet為Panel的子類根本方法add(Componentcomp)將指定組件放到容器中g(shù)etComponent(intindex)獲取指定序號的組件remove(Component
comp)刪除指定組件setLayout(LayoutManager
mgr)設(shè)置容器布局36容器的組件布局布局管理器〔layoutmanager)用于控制組件在容器中的布局負(fù)責(zé)確定組件在容器中的位置和大小。調(diào)用容器的setLayout(布局管理器對象)方法,為容器指定某種布局。當(dāng)容器需要定位組件和確定組件大小時(shí),就會(huì)給布局管理器對象發(fā)消息,讓它完成該項(xiàng)工作。直接管理組件調(diào)用容器的setLayout(null)方法,關(guān)閉布局管理器。調(diào)用每一個(gè)組件的setLocation()方法決定組件位置。調(diào)用每一個(gè)組件的setSize()方法決定其大小。37布局管理器種類在Java的GUI界面設(shè)計(jì)中,布局控制是通過為容器設(shè)置布局編輯器來實(shí)現(xiàn)的。Java.awt包中共定義了五種布局編輯類,每一個(gè)布局編輯類對應(yīng)一種布局策略:FlowLayout:組件在一行中按參加的先后順序從左至右水平排列,排滿后折行,每行中的組件都居中排列。BorderLayout:把容器空間劃分為北、南、西、東、中五個(gè)區(qū),每參加一個(gè)組件都應(yīng)說明把這個(gè)組件加在那個(gè)區(qū)域中。CardLayout:每一個(gè)組件作為一個(gè)卡片,容器僅顯示多個(gè)卡片中的某一個(gè)GridLayout:以行和列的網(wǎng)格形式安排組件GridBagLayout:更復(fù)雜、功能更強(qiáng)的網(wǎng)格布局38確定容器布局缺省的布局管理器Window、Frame、Dialog—BorderLayout:缺省的窗口容器的管理器Panel、Applet—FlowLayout:缺省的Panel布局管理器選擇布局管理器的方法建立布局管理器類的對象利用容器的setLayout為容器指定布局(即指定一個(gè)布局管理器的對象)39確定容器布局改變?nèi)笔〔季止芾砥鞯姆椒?;例:BorderLayoutB=newBorderLayout(); C1.setLayout(B);or C1.setLayout(newBorderLayout());
例:將myFrame布局設(shè)定為FlowLayout類型
myFrame.setLayout(newFlowLayout());40FrameFrame(Stringtitle)構(gòu)造一個(gè)新的不可見的frame隱含的布局管理器是:BorderLayoutsetLayout(…)設(shè)置新的布局管理器。add(Component
comp)在容器上增加一個(gè)組件〔在容器為不可見的狀態(tài)時(shí)加〕。voidsetSize(int
width,int
height)設(shè)置組件大小setVisible(true)設(shè)置組件可見41Frame—Panel
Framefm1=newFrame("Hello");fm1.setSize(400,350);fm1.setBackground(Color.gray);fm1.setLayout(null);Panelpn1=newPanel();pn1.setSize(100,100);pn1.setBackground(Color.red);pn1.setLocation(0,50);fm1.add(pn1);…fm1.setVisible(true);
42FlowLayout布局管理器構(gòu)造方法:FlowLayout();FlowLayout(intalign,inthgap,intvgap);align:對齊方式:LEFTCENTERRIGHThgap:組件水平間距〔象素〕vgap:組件垂直間距無參數(shù)的構(gòu)造方法創(chuàng)立的FlowLayout對象,其對齊方式為CENTER居中方式,組件間的橫縱間距都為5個(gè)像素。43FlowLayout布局管理器
Framef=newFrame("FlowLayout");f.setSize(400,300);//不起作用
f.setBackground(Color.gray);f.setLayout(newFlowLayout(FlowLayout.LEFT,10,20));b1=newButton("button1");b2=newButton("button2");b3=newButton("button3");f.add(b1);f.add(b2);f.add(b3);f.setVisible(true);f.pack();//詢問布局管理器窗體大小44BorderLayout布局管理器setLayout(newBorderLayout())add(b1,BorderLayout.NORTH);
當(dāng)容器大小改變,組件相對位置不會(huì)改變。CenterNorthSouthWestEast45BorderLayout布局管理器
f=newFrame("BorderLayout");f.setSize(200,200);b1=newButton("button1");…b5=newButton("button5");f.add(b1,BorderLayout.NORTH);f.add(b2,BorderLayout.SOUTH);f.add(b3,BorderLayout.WEST);f.add(b4,BorderLayout.EAST);f.add(b5,BorderLayout.CENTER);f.setVisible(true);46Border-PanelclassMyFrameextendsFrame{MyFrame(){Buttonb1=newButton("1");Buttonb2=newButton("2");Buttonb3=newButton("3");Buttonb4=newButton("4");Panelp=newPanel();p.add(b1);p.add(b2);add(p,BorderLayout.NORTH);add(b3,BorderLayout.WEST);add(b4,BorderLayout.CENTER);pack();setVisible(true);}}47GridLayout布局管理器創(chuàng)立GridLayout對象作為布局編輯器,指定劃分網(wǎng)格的行數(shù)和列數(shù)(網(wǎng)格大小一樣〕。setLayout(newGridLayout(行數(shù),列數(shù)));setLayout(newGridLayout(行數(shù),列數(shù),行間隔,列間隔));調(diào)用容器的方法add()將組件參加容器,組件填入容器的順序?qū)凑盏谝恍械谝粋€(gè)、第一行第二個(gè)、……每個(gè)網(wǎng)格中都必須填入組件,如果希望某個(gè)網(wǎng)格為空白,可以為它參加一個(gè)空的標(biāo)簽:add(newLabel());48GridLayout布局管理器
f=newFrame("GridLayout");f.setLayout(newGridLayout(2,3));f.setSize(200,100);f.setBackground(Color.gray);b1=newButton("1");…b6=newButton("6");f.add(b1);…f.setVisible(true);49布局例
Framefm=newFrame()fm.setLayout(newFlowLayout());tf=newTextField(22);fm.add(tf);Panelp1=newPanel();p1.setLayout(newGridLayout(4,3));p1.add(…);Panelp2=newPanel();p2.setLayout(newGridLayout(4,3));p2.add(…);fm.add(p1);fm.add(p2);50GridBagLayout布局管理器每個(gè)GridBagLayout對象維護(hù)一個(gè)動(dòng)態(tài)矩形網(wǎng)格,每個(gè)組件可占據(jù)一個(gè)或多個(gè)單元作為它的顯示區(qū)域。每一個(gè)組件都與一個(gè)GridBagConstraints類的實(shí)例相連,以指定在顯示區(qū)域中如何擺放,并可確定大小。步驟:setLayout(newGridBagLayout());GridBagConstraintsgbc=newGridBagConstraints();gbc.gridx=0;…(屬性賦值)add(button1,gbc)51GridBagLayout布局管理器設(shè)置GridBagConstraints類實(shí)例屬性值:gridxgridy組件顯示區(qū)域的左上角單元格坐標(biāo)gridwidthgridheight指定顯示區(qū)域行、列單元數(shù)RELATIVE緊挨著前一個(gè)組件擺放fill當(dāng)顯示區(qū)域大于組件時(shí)如何擴(kuò)充組件:HORIZONTAL水平充滿VERTICAL垂直充滿BOTH全部填充NONE不調(diào)整〔隱含〕ipadxipady指定組件間最小間隔anchor當(dāng)顯示區(qū)域大于組件時(shí)如何擺放組件(對齊方式)CENTER〔隱含〕,NORTH,EAST,SOUTH,WEST,SOUTHEAST,NORTHEAST,SOUTHWEST,NORTHWEST.52CardLayout布局管理器使用CardLayout的容器外表可以容納多個(gè)組件,將每一個(gè)組件視為一張卡片,同一時(shí)刻只能顯示一個(gè)組件。setLayout(newCardLayout())CardLayout方法〔按序指定組件〕first(Container
parent)顯示第一個(gè)版面的內(nèi)容last(Container
parent)顯示最后一個(gè)版面的內(nèi)容previous(Container
parent)顯示前一個(gè)版面的內(nèi)容next(Container
parent)顯示下一個(gè)版面的內(nèi)容CardLayout方法(按名顯示組件〕addLayoutComponent(String
name,Component
c)show(Container
parent,String
name)53利用AWT創(chuàng)立自己的GUIGUI外觀設(shè)計(jì)設(shè)計(jì)標(biāo)準(zhǔn)構(gòu)件層次關(guān)系:構(gòu)件層次結(jié)構(gòu)關(guān)系樹設(shè)置容器布局策略:setLayout()生成標(biāo)準(zhǔn)構(gòu)件向容器中添加組成構(gòu)件:add()方法構(gòu)件事件處理例:AWTComponent.java54publicclassAWTComponentextendsFrame{.........publicAWTComponent(){ setSize(450,300);//設(shè)置Frame大小 setLayout(newFlowLayout());//設(shè)置布局 ......... //創(chuàng)立組件 Group1=newCheckboxGroup();//創(chuàng)立單項(xiàng)選擇按鈕組 radioButton1=newCheckbox("male", Group1,false); add(radioButton1);//把組件參加容器 radioButton2=newCheckbox("female", Group1,false); add(radioButton2); ......... setVisible(true);//顯示容器及組件 }.........}還缺什么嗎?55的事件處理使用單一的類來接受所有類型的事件;使用action(),handleEvent()以及其他的一些事件處理方法〔如鼠標(biāo)事件、鍵盤事件、焦點(diǎn)事件〕來進(jìn)行相應(yīng)事件的事件處理。缺點(diǎn):造成長if分支語句組,不利于面向?qū)ο蟮木幊?6Java1.1對事件處理的改進(jìn)引入包更加面向?qū)ο?,易于理解定義了事件的“發(fā)生者〞和“監(jiān)聽者〞對象按鈕事件、文本領(lǐng)件、選擇事件、調(diào)整事件、鼠標(biāo)事件、鍵盤事件等事件以類層次來表達(dá),取代了1.0.2中的單一的類,并可以自定義事件類型57事件及處理機(jī)制用戶操作GUI組件時(shí)會(huì)引發(fā)各種事件。事件:描述“發(fā)生了什么事情〞的對象。系統(tǒng)根據(jù)用戶的操作構(gòu)造出相應(yīng)事件類的對象。事件源:事件的產(chǎn)生地。事件處理程序:是一個(gè)方法,它接收一個(gè)事件對象、分析它、并完成對該事件的處理。每個(gè)事件有一個(gè)相應(yīng)的監(jiān)聽者接口,它規(guī)定了能夠接收〔并處理〕該類事件的方法的標(biāo)準(zhǔn)。監(jiān)聽者:實(shí)現(xiàn)了監(jiān)聽者接口的類,它包含有事件處理程序。編程人員要為事件源指定監(jiān)聽者對象〔即指定處理某種事件的事件處理程序〕。58事件處理機(jī)制組件〔事件發(fā)生者〕觸發(fā)一個(gè)相應(yīng)類型的事件此事件由相應(yīng)類型的Listener〔事件監(jiān)聽者〕接收并處理Button1事件發(fā)生者接收事件e,并做處理ActionListener事件監(jiān)聽者觸發(fā)ActionEvente點(diǎn)擊,59事件及處理機(jī)制調(diào)用按扭的addActionListener(
)方法,為該按扭指定監(jiān)聽者。鼠標(biāo)單擊按扭ActionEvent事件
觸發(fā)publicvoidactionPerformed(ActionEvente)ActionListener接口ActionEvent事件監(jiān)聽者類監(jiān)聽者對象實(shí)現(xiàn)接口60幾個(gè)有用的概念事件-在包中定義了假設(shè)干類型的事件類監(jiān)聽者接口-特定類型的Listener接口,用于監(jiān)聽特定類型的事件監(jiān)聽者類-是實(shí)現(xiàn)了某種監(jiān)聽者接口的類,由編程者定義事件監(jiān)聽者-是某個(gè)監(jiān)聽者類的對象,由編程者使用new創(chuàng)立61實(shí)現(xiàn)步驟根據(jù)需要定義相應(yīng)類型的監(jiān)聽者類,在類的定義中完成事件的處理〔建議使用innerclass定義〕;創(chuàng)立事件監(jiān)聽者對象;為將會(huì)觸發(fā)事件的組件C注冊相應(yīng)的事件監(jiān)聽者對象〔使用C的addXXXListener()方法〕。例:ButtonAct.java62publicclassButtonActextendsFrame{.........publicButtonAct(){ .........//為b1注冊事件監(jiān)聽者B1
b1.addActionListener(newB1()); add(b1); .........}//利用innerclass結(jié)構(gòu)定義監(jiān)聽者類
classB1implementsActionListener{//利用actionPerformed方法進(jìn)行事件處理
publicvoidactionPerformed(ActionEvente){ who.setText("Button1"); }}.........}///:~63事件與監(jiān)聽者類型XXXListener接口與XXXEventXXX為特定類型常用類型:
Action,Focus,Key,Window,MouseEventvs. Mouse/MouseMotionListener注冊與取消:組件包含的新方法
addXXXListener()與removeXXXListener()參考:eventtables.html64監(jiān)聽者接口中有什么?每種Listener接口均定義了一套abstract方法,編程者必須在監(jiān)聽者類中實(shí)現(xiàn)這些方法來做事件處理;例:ActionListener:actionPerformed()WindowListener: windowOpened/Closing/Closed/Activated/
Deactivated/Iconified/Deiconified()65使用ListenerAdapter由于接口中的方法為abstract方法,所以在監(jiān)聽者類中要實(shí)現(xiàn)所有的方法,較為煩瑣。為了簡化編程,引入了Adapter。具有兩個(gè)以上方法的監(jiān)聽者接口均對應(yīng)一個(gè)XXXAdapter類,提供了接口中每個(gè)方法的缺省實(shí)現(xiàn)。66使用ListenerAdapter〔續(xù)〕例:classMyWindowListenerextendsWindowAdapter{publicvoidwindowClosing(WindowEvente){System.exit(0);}}例:DoubleClick.java〔相應(yīng)鼠標(biāo)事件〕67publicclassDoubleClickextendsFrame{Vectorm_vLocs;//保存鼠標(biāo)單擊過的各點(diǎn),用以繪制各點(diǎn)連線
Pointm_CursorLoc;//跟蹤當(dāng)前鼠標(biāo)位置,用以繪制十字光標(biāo)
publicDoubleClick(){ m_vLocs=newVector(); m_CursorLoc=newPoint(100,100); setSize(400,400);
//為Frame注冊3個(gè)事件監(jiān)聽者
addMouseListener(newclick()); addMouseMotionListener(newmove()); addWindowListener(newwd());}publicvoidpaint(Graphicsg){…//繪制十字光標(biāo),連接各點(diǎn)}68classclickextendsMouseAdapter{//鼠標(biāo)事件監(jiān)聽者類 publicvoidmouseClicked(MouseEvente){//響應(yīng)點(diǎn)擊 if(e.getClickCount()>1)//雙擊時(shí)去除向量中各點(diǎn) m_vLocs.removeAllElements(); else//單擊時(shí)在向量中增加一點(diǎn) m_vLocs.addElement(e.getPoint()); repaint();//重新繪制一次 }}classmoveextendsMouseMotionAdapter{//鼠標(biāo)移動(dòng)監(jiān)聽者類 publicvoidmouseMoved(MouseEvente){//響應(yīng)移動(dòng) m_CursorLoc=newPoint(e.getX(),e.getY()); repaint();//重新繪制一次 }}…………}69事件類ActionEvent類:屬于動(dòng)作事件,包括:點(diǎn)擊按鈕;雙擊一個(gè)列表中的選項(xiàng);選擇菜單項(xiàng);在文本框中按回車。最典型的例子是:鼠標(biāo)點(diǎn)擊按鈕所產(chǎn)生的事件,經(jīng)ActionListener接口觸發(fā)一連串動(dòng)作,再由actionPerformed()方法完成這些動(dòng)作。e.getSource()返回事件發(fā)生的對象(名)e.getActionCommand()返回按扭名(動(dòng)作事件的命令字符串)。ActionListener接口publicvoidactionPerformed(ActionEvente)70圖形用戶界面例importjava.awt.*;import.*;publicclassa{publicstaticvoidmain(Stringargs[]){MyFrameform1=newMyFrame();}}classMyFrameextendsFrame{MyFrame(){super("窗口標(biāo)題");
setSize(200,100);setFont(newFont("TimesRoman",Font.BOLD,20));71圖形用戶界面例
setLayout(newFlowLayout());Buttonb=newButton("close");add(b);b.addActionListener(newBprocess());setVisible(true);}}classBprocessimplementsActionListener{publicvoidactionPerformed(ActionEvente){System.exit(0);}}72監(jiān)聽者類某個(gè)類可以兼職也可以專職做這件事〔實(shí)現(xiàn)監(jiān)聽者接口〕。一個(gè)類假設(shè)實(shí)現(xiàn)一個(gè)接口,必須實(shí)現(xiàn)接口的全部方法。例如:ActionListener接口只有一個(gè)方法:voidactionPerformed(ActionEvente)實(shí)現(xiàn)接口的類可以是:一般類內(nèi)部類匿名類73事件處理有關(guān)問題有哪些事件類()?每個(gè)事件類的監(jiān)聽者接口?每個(gè)監(jiān)聽者接口規(guī)定的方法?多方法的監(jiān)聽者接口的適配器〔實(shí)現(xiàn)接口的抽象類〕是什么?組件的事件委托〔注冊〕方法?74窗口事件關(guān)閉窗口框時(shí)引發(fā)WindowEvent事件委托addWindowListener(newWclose());定義監(jiān)聽者類
classWcloseimplementsWindowListener{ publicvoidwindowClosing(WindowEvente){ System.exit(0);}WindowListener類有7個(gè)方法,必須都實(shí)現(xiàn)WindowAdapter
接收窗口事件的抽象適配器類,用空內(nèi)容實(shí)現(xiàn)了WindowListener接口的所有方法classWcloseextendsWindowAdapter{…}75ActionEvent動(dòng)作事件引發(fā)原因:單擊按扭,雙擊列表框中選項(xiàng),選擇菜單項(xiàng),文本框中的回車事件監(jiān)聽接口:ActionListener接口方法:actionPerformed(ActionEvente)組件注冊該事件方法:addActionListener(監(jiān)聽者〕76TextEvent文本領(lǐng)件引發(fā)原因:文本框或文本區(qū)域內(nèi)容改變事件監(jiān)聽接口:TextListener接口方法:textValueChanged(TextEvent
e)組件注冊該事件方法:addTextListener(監(jiān)聽者〕77ItemEvent選擇事件引發(fā)原因:改變列表框中的選中項(xiàng)改變復(fù)選框選中狀態(tài)改變下拉選單的選中項(xiàng)事件監(jiān)聽接口:ItemListener接口方法:itemStateChanged(ItemEvent
e)組件注冊該事件方法:addItemListener(監(jiān)聽者〕78AdjustmentEvent調(diào)整事件引發(fā)原因:操作滾動(dòng)條改變滑塊位置事件監(jiān)聽接口:AdjustmentListener接口方法:adjustmentValueChanged(AdjustmentEvent
e)組件注冊該事件方法:addAdjustmentListener(監(jiān)聽者〕79KeyEvent事件引發(fā)原因:敲完鍵〔KEY-TYPED)按下鍵(KEY-PRESSED)釋放鍵(KEY-RELEASE)事件監(jiān)聽接口:KeyListener接口方法:keyPressed(KeyEvent
e)鍵已被按下時(shí)調(diào)用keyReleased(KeyEvent
e)鍵已被釋放時(shí)調(diào)用keyTyped(KeyEvent
e)鍵已被敲完時(shí)調(diào)用KeyEvent方法:charch=e.getKeyChar();事件監(jiān)聽適配器〔抽象類〕KeyAdapter組件注冊該事件方法:addKeyListener(監(jiān)聽者〕80MouseEvent事件引發(fā)原因:(鼠標(biāo)作用在一個(gè)組件上)鼠標(biāo)事件:鼠標(biāo)鍵按下,鼠標(biāo)鍵抬起,單擊鼠標(biāo),鼠標(biāo)光標(biāo)進(jìn)入一個(gè)組件,鼠標(biāo)光標(biāo)離開一個(gè)組件。鼠標(biāo)移動(dòng)事件:鼠標(biāo)移動(dòng),鼠標(biāo)拖動(dòng)鼠標(biāo)事件監(jiān)聽接口1:MouseListener接受鼠標(biāo)事件該接口方法:mouseClicked(MouseEvent
e)mouseEntered(MouseEvent
e)鼠標(biāo)光標(biāo)進(jìn)入一個(gè)組件mouseExited(MouseEvent
e)鼠標(biāo)光標(biāo)離開一個(gè)組件81MouseEvent事件〔續(xù)〕鼠標(biāo)事件監(jiān)聽適配器〔抽象類〕MouseAdapter鼠標(biāo)事件監(jiān)聽接口2:MouseMotionListener接受鼠標(biāo)移動(dòng)事件該接口方法:mouseMoved(MouseEvent
e)鼠標(biāo)光標(biāo)在組件上移動(dòng)mouseDragged(MouseEvent
e)用鼠標(biāo)拖動(dòng)一個(gè)組件鼠標(biāo)移動(dòng)事件監(jiān)聽適配器MouseMotionAdapter組件注冊鼠標(biāo)事件方法:addMouseListener(監(jiān)聽者〕組件注冊鼠標(biāo)移動(dòng)事件方法:addMouseMotionListener(監(jiān)聽者〕82MouseEvent事件〔續(xù)〕MouseEvent方法e.getClickCount()=1單擊=2雙擊Pointe.getPoint()取鼠標(biāo)光標(biāo)位置inte.getX()inte.getY()取鼠標(biāo)光標(biāo)位置e.getModifiers()=e.BUTTON1_MASK鼠標(biāo)左鍵=e.BUTTON3_MASK鼠標(biāo)右鍵83WindowEvent事件引發(fā)原因:有關(guān)窗口操作引發(fā)的事件事件監(jiān)聽接口WindowListener接口方法windowActivated(WindowEvent
e)
激活窗口windowClosed(WindowEvent
e)
調(diào)用dispose方法關(guān)閉窗口后windowClosing(WindowEvent
e)
窗口正在被關(guān)閉(試圖利用窗口關(guān)閉按鈕關(guān)閉窗口)windowDeactivated(WindowEvent
e)
本窗口成為非活動(dòng)窗口84WindowEvent事件(續(xù)〕windowDeiconified(WindowEvent
e)窗口從最小化恢復(fù)為普通窗口windowIconified(WindowEvent
e)窗口變?yōu)樽钚』瘓D標(biāo)windowOpened(WindowEvent
e)窗口被翻開成為可見時(shí)接口適配器WindowAdapter注冊事件方法addWindowListener85FocusEvent事件引發(fā)原因:組件獲得焦點(diǎn)組件失去焦點(diǎn)事件監(jiān)聽接口FocusListener接口方法:focusGained(FocusEvente)組件獲得焦點(diǎn)時(shí)調(diào)用focusLost(FocusEvent
e)組件失去焦點(diǎn)時(shí)調(diào)用接口適配器:FocusAdapter組件注冊該事件方法:addFocusListener86TextEvent事件引發(fā)原因:當(dāng)組件〔如文本框〕文本改變時(shí)引發(fā)事件監(jiān)聽接口:TextListener接口方法:textValueChanged(TextEvent
e)組件注冊該事件方法:addTextListener87ComponentEvent事件引發(fā)原因:當(dāng)組件移動(dòng)、改變大小、改變可見性時(shí)引發(fā)事件監(jiān)聽接口:ComponentListener接口方法:componentHidden(ComponentEvente)組件隱藏componentMoved(ComponentEvent
e)組件移動(dòng)componentResized(ComponentEvent
e)組件改變大小componentShown(ComponentEvent
e)組件變?yōu)榭梢娊涌谶m配器ComponentAdapter組件注冊該事件方法:addComponentListener88ContainerEvent事件引發(fā)原因:當(dāng)容器內(nèi)增加或移走組件時(shí)引發(fā)事件監(jiān)聽接口:ContainerListener接口方法componentAdded(ContainerEvent
e)容器內(nèi)參加組件componentRemoved(ContainerEvent
e)沉著器中移走組件接口適配器ContainerAdapter容器注冊該事件方法:addContainerListener89GUI標(biāo)準(zhǔn)組件Label(標(biāo)簽)構(gòu)造方法Labelmyl=newLabel(“標(biāo)簽內(nèi)容〞);Labela=newLabel(“information〞);Labela=newLabel(“information〞,Label.CENTER);方法a.setText(“新內(nèi)容〞);設(shè)置標(biāo)簽內(nèi)容Stringa.getText()讀取標(biāo)簽內(nèi)容Button(按鈕)ButtonmyB1=newButton();ButtonmyB2=newButton(“Cancel〞);90GUI標(biāo)準(zhǔn)組件Checkbox(檢測盒)創(chuàng)立時(shí)指定檢測盒的標(biāo)簽Checkboxcb1=newCheckbox();Checkboxcb2=newCheckbox(“registered〞);Checkboxcb3=newCheckbox(“registered〞,true);Checkboxcb4=newCheckbox(“registered〞,true,group);獲取和設(shè)置檢測盒的狀態(tài)cb.setState(true);booleanb=cb.getState();91Checkbox組件構(gòu)造方法Checkbox(String
label)Checkbox(String
label,boolean
state)Checkbox(String
label,boolean
state,
CheckboxGroup
group)
方法:booleangetState()setState(boolean
state)92GUI標(biāo)準(zhǔn)組件CheckboxGroup(單項(xiàng)選擇按鈕組)單項(xiàng)選擇按鈕組是一組Checkbox的集合,是將一組Checkbox按扭組成單項(xiàng)選擇按扭組件首先創(chuàng)立CheckboxGroup,再參加單個(gè)按鈕方法:CheckboxgetSelectedCheckbox()取得目前選取的復(fù)選框?qū)ο髎etSelectedCheckbox(Checkbox
box)設(shè)定目前選取的復(fù)選框?qū)ο?3CheckboxGroup組件例:setLayout(newGridLayout(3,1));CheckboxGroupcbg=newCheckboxGroup();Checkboxck1=newCheckbox(“one〞,true,cbg);Checkboxck2=newCheckbox(“two〞,false,cbg);Checkboxck3=newCheckbox(“three〞,false,cbg);add(ck1);add(ck2);add(ck3);把CheckboxGroup參加容器時(shí)需要把其中的每個(gè)復(fù)選按鈕逐個(gè)參加到容器中,而不能使用CheckboxGroup對象一次性地參加。94TextField行編輯框組件構(gòu)造方法(String,int)TextFieldf1=newTextField(30);TextFieldf1=newTextField(“abc〞,30);建30個(gè)字符寬的行編輯框方法:StringgetText()讀文本框內(nèi)容setText(“abc〞)設(shè)置編輯框內(nèi)容setEchoChar(char
c)設(shè)置回顯字符TextComponent方法:setEditable(false);selectAll()95TextArea組件構(gòu)造方法(String,int,int)TextAreat1=newTestArea(10,45);建10行、45列的文本區(qū)域TextAreat1=newTestArea(“abc〞,10,45);TextAreat1=newTestArea(“abc〞,10,45,滾動(dòng)條);滾動(dòng)條指定SCROLLBARS_BOTHSCROLLBARS_HORIZONTAL_ONLYSCROLLBARS_VERTICAL_ONLYSCROLLBARS_NONE方法append(String
str)追加文本96List列表框首先創(chuàng)立List對象,再調(diào)用add()方法參加List列表的各選項(xiàng)。列表可以實(shí)現(xiàn)多項(xiàng)選擇多構(gòu)造方法List(int
rows,boolean
multipleMode)rows顯示行數(shù);multipleMode是否允許多項(xiàng)選擇方法:list1.add(“classA〞);list1.add(“classB〞);list1.add(“classC〞,0);指定參加選項(xiàng)位置97List列表框方法intgetSelectedIndex()取被選項(xiàng)索引int[]getSelectedIndexes()取被選項(xiàng)索引〔多項(xiàng)選擇〕StringgetSelectedItem()取被選項(xiàng)String[]getSelectedItems()取被選項(xiàng)〔多項(xiàng)選擇〕voidselect(int
index)選中指定的項(xiàng)StringgetItem(int
i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 3 Where did you go(說課稿)-2023-2024學(xué)年人教PEP版英語六年級下冊
- Unit 6 Review Period 4 (說課稿)-2024-2025學(xué)年北師大版(三起)英語三年級上冊
- 《1、了解學(xué)習(xí)好習(xí)慣》(說課稿)-2024-2025學(xué)年二年級上冊綜合實(shí)踐活動(dòng)魯科版
- 《10 交通安全小常識(shí)》(說課稿)-2023-2024學(xué)年四年級上冊綜合實(shí)踐活動(dòng)長春版
- 23《梅蘭芳蓄須》說課稿2024-2025學(xué)年統(tǒng)編版語文四年級上冊
- 14《我要的是葫蘆》第一課時(shí) 說課稿-2024-2025學(xué)年語文二年級上冊統(tǒng)編版
- Unit5 The colourful world第三課時(shí)(說課稿)-2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- 2024-2025學(xué)年高中歷史 第四單元 工業(yè)文明沖擊下的改革 第12課 俄國農(nóng)奴制改革(2)教學(xué)說課稿 岳麓版選修1
- 2025合同約定的“滯納金”是否可以視為違約金
- 2025建安施工合同文本
- 《自主神經(jīng)系統(tǒng)》課件
- 2025集團(tuán)公司內(nèi)部借款合同范本
- 2025年山西地質(zhì)集團(tuán)社會(huì)招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 四川省綿陽市2025屆高三第二次診斷性考試思想政治試題(含答案)
- 2024-2025學(xué)年遼寧省沈陽市沈河區(qū)七年級(上)期末英語試卷(含答案)
- 2024-2025學(xué)年初中七年級上學(xué)期數(shù)學(xué)期末綜合卷(人教版)含答案
- T型引流管常見并發(fā)癥的預(yù)防及處理
- 2024-2025學(xué)年人教新版九年級(上)化學(xué)寒假作業(yè)(九)
- 2024年計(jì)算機(jī)二級WPS考試題庫(共380題含答案)
- 2022年全國醫(yī)學(xué)博士英語統(tǒng)一考試試題
- 《工業(yè)自動(dòng)化技術(shù)》課件
評論
0/150
提交評論