




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章圖形界面程序設(shè)計(jì)圖形用戶(hù)界面構(gòu)成組件的組織—布局管理器Swing容器Swing組件項(xiàng)目學(xué)做課程內(nèi)容二三四五一項(xiàng)目拓展六
一、圖形用戶(hù)界面構(gòu)成之前我們所編寫(xiě)的Java程序都是在DOS方式下運(yùn)行的而Windows平臺(tái)通過(guò)窗口式的圖形界面實(shí)現(xiàn)人機(jī)對(duì)話,因此編寫(xiě)圖形方式的Java程序也是必須的。
一、圖形用戶(hù)界面構(gòu)成設(shè)計(jì)一個(gè)圖形用戶(hù)界面,界面如圖所示:
例1所需要的知識(shí)點(diǎn)圖形用戶(hù)界面基礎(chǔ)知識(shí)布局管理器的使用圖形用戶(hù)界面(GraphicsUserInterface,GUI)是程序與用戶(hù)交互的方式,利用它系統(tǒng)可以接收用戶(hù)的輸入并向用戶(hù)輸出程序運(yùn)行的結(jié)果。
一、圖形用戶(hù)界面構(gòu)成
一、圖形用戶(hù)界面構(gòu)成java.awt包:java.awt包中提供了大量的進(jìn)行GUI設(shè)計(jì)所使用的類(lèi)和接口,是Java語(yǔ)言進(jìn)行GUI程序設(shè)計(jì)的基礎(chǔ)。javax.swing包:swing是由100%純Java實(shí)現(xiàn)的,沒(méi)有本地代碼,不依賴(lài)操作系統(tǒng)的支持,它的出現(xiàn)使得Java的圖形用戶(hù)界面上了一個(gè)臺(tái)階。
二、組件的組織—布局管理器所謂布局,就是討論各組件在容器中如何擺放的問(wèn)題。Java的組件不使用坐標(biāo)這種絕對(duì)定位的形式,而使用布局管理器(layoutmanager)進(jìn)行相對(duì)定位,使得程序界面能夠自動(dòng)適應(yīng)不同分辨率的屏幕
二、組件的組織—布局管理器布局管理器是容器所具有的特性,每種布局管理器都指定了一套組件的放置形式,適合于不同的場(chǎng)合。Java的布局管理器常用的有4種:FlowLayout(流式布局)
將組件逐個(gè)放到容器的一行上
一行放滿(mǎn)后就重新起一個(gè)新行BorderLayout(邊界布局)
容器被劃分為東(East)、南(South)、
西(West)、北(North)、中(Center)
二、組件的組織—布局管理器
二、組件的組織—布局管理器GridLayout(網(wǎng)格式布局)
將容器分為大小相等的若干行乘若干列的網(wǎng)格,組件從左至右,從上到下放入網(wǎng)格中,每個(gè)組件占一格(表格式)每個(gè)容器都有一個(gè)默認(rèn)的布局管理器當(dāng)容器被創(chuàng)建后,可以通過(guò)特定的方法改變?nèi)萜鞯牟季止芾砥鱦ava.awt.ComponentContainerWindowFrameDialogPaneljava.applet.AppletBorderLayoutFlowLayout
二、組件的組織—布局管理器1.FlowLayout布局管理器FlowLayout是Panel類(lèi)的默認(rèn)布局管理器布局方式:
將組件逐個(gè)地放在容器的一行上,一行放滿(mǎn)就另起一個(gè)新行。
其中,一行的長(zhǎng)度取決于容器的寬度
二、組件的組織—布局管理器1.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)
二、組件的組織—布局管理器1.FlowLayout布局管理器設(shè)置FlowLayout布局
FlowLayoutflow=newFlowLayout();
Framefr=newFrame();
fr.setLayout(flow);由于一個(gè)容器只要設(shè)置了布局通常就不會(huì)再改變,因此上面的語(yǔ)句可以簡(jiǎn)化成:
fr.setLayout(newFlowLayout());
二、組件的組織—布局管理器1.FlowLayout布局管理器可以設(shè)置框架fr為組件左對(duì)齊的FlowLayout布局:
fr.setLayout(newFlowLayout(FlowLayout.LEFT));還可以設(shè)置框架fr為組件左對(duì)齊的FlowLayout布局,并且組件的水平間距為20像素,垂直間距為40像素:
fr.setLayout(newFlowLayout(FlowLayout.LEFT,20,40));
二、組件的組織—布局管理器2.BorderLayout布局管理器BorderLayout是Frame類(lèi)和Dialog類(lèi)的默認(rèn)布局管理器布局方式:
容器被劃分為東(East)、南(South)、
西(West)、北(North)、中(Center)五個(gè)區(qū)域變化規(guī)律為:組件的相對(duì)位置不變,大小發(fā)生變化。
二、組件的組織—布局管理器水平拉寬我們可以看到:南、北、中控件大小會(huì)有變化,東、西控件大小不變化。2.BorderLayout布局管理器
二、組件的組織—布局管理器上下拉長(zhǎng)可以看到:東、西、中控件大小會(huì)有變化,南、北控件大小不變化。2.BorderLayout布局管理器
二、組件的組織—布局管理器2.BorderLayout布局管理器構(gòu)造方法:publicBorderLayout();publicBorderLayout(inthgap,intvgap);其中,hgap和vagp表示組件的水平和垂直間距,單位是像素,默認(rèn)為0
二、組件的組織—布局管理器2.BorderLayout布局管理器Container容器類(lèi)放置組件的方法:
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)格中,每個(gè)組件占一格
實(shí)際上,這種布局方式就是一個(gè)表格
二、組件的組織—布局管理器使容器中的各組件呈網(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ù)不變。
二、組件的組織—布局管理器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ù)而定
二、組件的組織—布局管理器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)格布局示例
二、組件的組織—布局管理器在實(shí)際應(yīng)用中,網(wǎng)格布局(有時(shí)僅僅一行或者一列)在組織窗口的局部區(qū)域比較有用。添加修改刪除查詢(xún)統(tǒng)計(jì)如果需要一行或多行相同尺寸的按鈕,那么可以把按鈕放在一個(gè)面板里,該面板使用網(wǎng)格布局進(jìn)行管理。
二、組件的組織—布局管理器網(wǎng)格組布局是所有布局管理器之母。可看作是沒(méi)有限制的網(wǎng)格布局。它按行列來(lái)排列組件,但是行和列的大小都是可變的,并且可以合并相鄰的單元格來(lái)適應(yīng)更大的組件。組件不需要填充整個(gè)單元格區(qū)域,并且可以指定單元格內(nèi)的對(duì)齊方式。使用網(wǎng)格組布局管理器進(jìn)行布局的步驟創(chuàng)建一個(gè)GridBagLayout類(lèi)型的對(duì)象。不必指定網(wǎng)格的行數(shù)和列數(shù),布局管理器會(huì)根據(jù)后面所給的信息來(lái)確定。把此對(duì)象設(shè)成容器的布局管理器。創(chuàng)建一個(gè)GridBagConstraints類(lèi)型的對(duì)象。該對(duì)象指定組件如何在網(wǎng)格組中布局。對(duì)于每一個(gè)組件,填充GridBagConstraints對(duì)象。最后,使用add(component,constraints)方法來(lái)添加組件和約束。
二、組件的組織—布局管理器成員變量gridx,gridy:指定添加組件左上角的行和列的位置,坐標(biāo)從0開(kāi)始。gridwidth,gridheight:指定組件將占用多少行和多少列。weightx,weighty:區(qū)域放大時(shí)的增量參數(shù),網(wǎng)格布局中的每個(gè)區(qū)域都需要設(shè)置。如果設(shè)置為0,那么該區(qū)域?qū)⒂肋h(yuǎn)保持它的初始尺寸不變。如果你需要一行或一列保持固定大小,那么你需要把該行或該列的所有組件的增量都設(shè)置為0。這些變量的缺省值為0。ipadx,ipady:指定組件的最小高度和寬度
二、組件的組織—布局管理器成員變量fill:指定在單元大于組件的情況下,組件如何填充此單元,共有4可選值。缺省值為:GridBagConstraints.NONEanchor:指定將組件放置在單元中的位置,共有9個(gè)可選值。缺省值為: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);
二、組件的組織—布局管理器
類(lèi)GridBagConstraints中提供了一些相應(yīng)的屬性和常量來(lái)設(shè)置對(duì)組件的空間限制:
gridx,gridygridwidth,gridheightfillipadx,ipadyinsetsarchorweightx,weighty
二、組件的組織—布局管理器(1)gridx,gridy(int)gridx指明組件顯示區(qū)域左端在容器中的位置,若為0,則組件處于最左端的單元。它是一個(gè)非負(fù)的整數(shù),其缺省值為GridBagConstraints.RELATIVE,表明把組件放在前一個(gè)添加到容器中的組件的右端。
gridy指明組件顯示區(qū)域上端在容器中的位置,若為0,則組件處于最上端的單元。它是一個(gè)非負(fù)的整數(shù),其缺省值為GridBagConstraints.RELATIVE,表明把組件放在前一個(gè)添加到容器中的組件的下端。
二、組件的組織—布局管理器(2)gridwidth,gridheight(int)
gridwidth指明組件顯示區(qū)在一行中所占的網(wǎng)格單元數(shù)(寬度)。它是一個(gè)非負(fù)的整數(shù),其缺省值為1。若其值為GridBagConstraints.REMAINDER,表明該組件是一行中最后一個(gè)組件;若其值為GridBagConstraints.RELATIVE,表明該組件緊挨著該行中最后一個(gè)組件。
gridheight指明組件顯示區(qū)在一列中所占的網(wǎng)格單元數(shù)(高度)。它是一個(gè)非負(fù)的整數(shù),其缺省值為1。若其值為GridBagConstraints.REMAINDER,表明該組件是一列中最后一個(gè)組件;若其值為GridBagConstraints.RELATIVE,表明該組件緊挨著該列中最后一個(gè)組件。
二、組件的組織—布局管理器(3)fill(int)
fill屬性指明當(dāng)組件所在的網(wǎng)格單元的區(qū)域大于組件所請(qǐng)求的區(qū)域時(shí),是否改變組件的尺寸:是按照水平方向填滿(mǎn)顯示區(qū),還是按垂直方向填滿(mǎn)顯示區(qū),其取值可為:
GridBagConstraints.NONE:缺省值,保持原有尺寸,兩個(gè)方向都不填滿(mǎn);
GridBagConstraints.HORIZONTAL:按水平方向填滿(mǎn)顯示區(qū),高度不變;
GridBagConstraints.VERTICAL:按垂直方向填滿(mǎn)顯示區(qū),寬度不變;
GridBagConstraints.BOTH:兩個(gè)方向上都填滿(mǎn)顯示區(qū)。
二、組件的組織—布局管理器(4)ipadx,ipady(int)
ipadx指明組件的寬度與指定的最小寬度之間的關(guān)系:組件的寬度為“指定的最小寬度+ipadx*2”。其缺省值為0。
ipady指明組件的高度與指定的最小高度之間的關(guān)系:組件的高度為“指定的最小高度+ipady*2”。其缺省值為0。
二、組件的組織—布局管理器(5)insets(Insets)
insets指明了組件與其顯示區(qū)邊緣之間的距離,大小由一個(gè)Insets對(duì)象指定。
Insets類(lèi)有四個(gè)屬性:
top:上端間距
bottom:下端間距
left:左端間距
right:右端間距其缺省值為一個(gè)上述四個(gè)屬性值都為0的對(duì)象:
newInsets(0,0,0,0);
二、組件的組織—布局管理器NCEPU(6)archor(int)
archor屬性指明了當(dāng)組件的尺寸小于其顯示區(qū)時(shí),在顯示區(qū)中如何放置該組件的位置,其值可為:
GridBagConstraints.CENTER(缺省值)
GridBagConstraints.NORTHGridBagConstraints.NORTHEASTGridBagConstraints.EASTGridBagConstraints.SOUTHEASTGridBagConstraints.SOUTHGridBagConstraints.SOUTHWESTGridBagConstraints.WESTGridBagConstraints.NORTHWEST
二、組件的組織—布局管理器(7)weightx,weighty(double)
weightx指明當(dāng)容器擴(kuò)大時(shí),如何在列間為組件分配額外的空間,其值可以從0.0到1.0,缺省值為0.0。
weighty指明當(dāng)容器擴(kuò)大時(shí),如何在行間為組件分配額外的空間,其值可以從0.0到1.0,缺省值為0.0。若兩者都為0,所有組件都團(tuán)聚在容器的中央,因?yàn)榇藭r(shí)所有額外空間都添加在網(wǎng)格單元與容器邊緣之間。數(shù)值越大,表明組件的行或列將占有更多的額外空間。若兩者都為1.0,表明組件的行或列將占有所有的額外空間。
二、組件的組織—布局管理器
當(dāng)一個(gè)容器的布局方式為GridBagLayout時(shí),往其中添加一個(gè)組件,必須先用GridBagConstraints設(shè)置該組件的空間限制。//在一個(gè)容器中GridBagLayoutg=newGridBagLayout();GridBagConstraintsc=newGridBagConstraints();setLayout(g);Buttonb=newButton(“Test”);//生成組件bc.fill=…//設(shè)置c的值……g.setConstraints(b,c);//根據(jù)c的值對(duì)組件b進(jìn)行空間限制add(b);
二、組件的組織—布局管理器
GridBagLayout是獲取GridBagConstraints實(shí)例中的值為某個(gè)組件設(shè)置了空間限制,當(dāng)往容器中添加了該組件后,該GridBagConstraints實(shí)例還可繼續(xù)用于其他組件,當(dāng)然其中值需要做相應(yīng)的調(diào)整。
二、組件的組織—布局管理器使用一個(gè)網(wǎng)格組布局的步驟在一張紙上繪出組件布局草圖。找出這樣一種網(wǎng)格:小組件可以容納在一個(gè)單元格內(nèi),大組件占用多個(gè)單元格。使用0、1、2、……來(lái)標(biāo)記網(wǎng)格中的行和列。現(xiàn)在可以設(shè)置gridx、gridy、gridwidth、gridheight的值。對(duì)于每個(gè)組件來(lái)說(shuō),考慮如下問(wèn)題:它是否需要水平或垂直地填充它所在的單元格?如果不是,那么它應(yīng)該如何對(duì)齊?這些問(wèn)題的答案就是fill和anchor參數(shù)。把所有的增量都設(shè)置為100。然而,如果你需要某一行或某一列始終保持它的默認(rèn)大小,那么把屬于該行或該列的所有組件的weightx或weighty都設(shè)置為0。編寫(xiě)代碼。仔細(xì)檢查GridBagConstraints的設(shè)置。一個(gè)錯(cuò)誤的約束參數(shù)可能會(huì)破壞整個(gè)布局。編譯、運(yùn)行程序。網(wǎng)格組布局示例3.null布局管理器前面所述的五種布局都不能隨意地放置組件,即不能達(dá)到精確定位和控制組件的要求。那么如何像VB、VC++等RAD(快速開(kāi)發(fā)環(huán)境)那樣實(shí)現(xiàn)精確定位的目的呢?答案是使用null布局。使用null布局如圖所示的登錄頁(yè)面,模擬公司招聘員工管理系統(tǒng)項(xiàng)目程序、員工登陸系統(tǒng)時(shí),先進(jìn)行身份驗(yàn)證(用戶(hù)名和口令)
二、組件的組織—布局管理器用戶(hù)名稱(chēng):
用戶(hù)密碼:chengyongxiao******登陸重設(shè)_□X3.null布局管理器請(qǐng)用戶(hù)改變窗口的大小,你將發(fā)現(xiàn)組件的大小和位置不會(huì)隨著窗口的變化而變化,這不符合一般應(yīng)用程序的要求,因此這種布局具有很多局限性。
總之,在實(shí)際中應(yīng)靈活使用布局,將多種布局聯(lián)合起來(lái)使用,僅使用一種是很難滿(mǎn)足設(shè)置要求的。
二、組件的組織—布局管理器Swing組件都是AWT的Container類(lèi)的直接子類(lèi)或間接子類(lèi)。
三、Swing容器Swing的類(lèi)層次結(jié)構(gòu)ObjectComponentJFrameContainerWindowFrameDialogJDialogJTextJComboBoxJLabelJListJMenuBarJOptionPaneJPanelJScrollBarAbstractButtonJToggleButtonJMenuItemJButtonJCheckBoxJRadioButtonJComponentJMenuAppletJApplet創(chuàng)建可視化界面的一般步驟選擇外觀布局管理添加組件事件處理
創(chuàng)建容器java程序的GUI設(shè)計(jì)主要包括下述三個(gè)概念:組件—Component容器—Container布局管理器--LayoutManager
三、Swing容器頂級(jí)容器:一般是一個(gè)頂層窗口(框架)JFrame:用于框架窗口的類(lèi),應(yīng)用程序至少使用一個(gè)框架窗口。JDialog:用于對(duì)話框的類(lèi)。JApplet:用于使用Swing組件的JavaApplet的類(lèi)。中間容器:需要包含在頂層容器中使用的容器。JPanel:面板,是最靈活、最常用的中間容器。JScrollPane:與JPanel類(lèi)似,但還可在大的組件或可擴(kuò)展組件周?chē)峁L動(dòng)條。JTabbedPane:包含多個(gè)組件,但一次只顯示一個(gè)組件。用戶(hù)可在組件之間方便地切換。JToolBar:按行或列排列一組組件(通常是按鈕)。
三、Swing容器在AWT庫(kù)中,對(duì)應(yīng)于框架的類(lèi)是Frame,在Swing庫(kù)中,相應(yīng)的類(lèi)是JFrame。JFrame類(lèi)擴(kuò)展了Frame類(lèi)。大部分AWT組件在Swing中都有等價(jià)的組件,它們?cè)诒硎拘问缴喜钜粋€(gè)“J”。
三、Swing容器—JFrameJFrame的使用JFrame類(lèi)的構(gòu)造方法如下:JFrame()創(chuàng)建無(wú)標(biāo)題的初始不可見(jiàn)框架。JFrame(Stringtitle)創(chuàng)建標(biāo)題為title的初始不可見(jiàn)框架。為了在選擇框架的關(guān)閉按鈕時(shí)能退出程序,應(yīng)添加WindowListener監(jiān)聽(tīng)器或書(shū)寫(xiě)下列代碼:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JFrame的常用方法setIconImage——窗口最小化(在Java中稱(chēng)為圖標(biāo)化)時(shí),把一個(gè)Image對(duì)象用作圖標(biāo)setTitle——設(shè)置窗口中標(biāo)題欄的文字setResizable——設(shè)置用戶(hù)是否可以改變框架大小。dispose——關(guān)閉窗口,并回收該窗口的所有資源setLocation——設(shè)置組件的位置setBounds——重新設(shè)置組件的大小和位置。setSize()——用來(lái)設(shè)置大小。setVisible(true)——用來(lái)設(shè)置該窗口為可見(jiàn)的對(duì)JFrame添加組件有兩種方式:(1)用getContentPane()方法獲得JFrame的內(nèi)容面板,再對(duì)其加入組件:frame.getContentPane().add(childComponent)如何添加組件(2)建立一個(gè)Jpanel或JDesktopPane等中間容器,把組件添加到容器中,用setContentPane()方法把該容器置為JFrame的內(nèi)容面板:JpanelcontentPane=newJpanel();……//把其它組件添加到Jpanel中;frame.setContentPane(contentPane);//把contentPane對(duì)象設(shè)置成為frame的內(nèi)容面板JFrame的使用Swing常用的容器—JPanelJPanel面板是一種添加到其他容器使用的容器組件。JPanel的構(gòu)造方法:publicJPanel()publicJPanel(LayoutManagerlayout)
JPanel可指定邊界,可用JComponent類(lèi)的setBorder()方法設(shè)置邊界。其用法如下:
publicvoidsetBorder(Borderborder)Swing常用容器—JPanel的使用JPanel面板是容器組件,沒(méi)有標(biāo)題,不能獨(dú)立存在。實(shí)例化以后必須使用Container類(lèi)的add方法裝入到Window對(duì)象或Frame對(duì)象中。可用javax.swing.BorderFactory類(lèi)中的方法獲得importjavax.swing.*;importjava.awt.*;importjava.awt.image.BufferedImage;importjavax.imageio.ImageIO;classGUIDemo1{ publicstaticvoidmain(String[]args)throwsException {JFramef=newJFrame("第一個(gè)Java窗口"); f.setSize(300,200);BufferedImageimage=ImageIO.read(f.getClass().getResource("/MPj.jpg"));f.setIconImage(image);//設(shè)置圖標(biāo)
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);//設(shè)置容器可見(jiàn)性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è)計(jì)一個(gè)含有JPanel的自定義的JFrame類(lèi),形式如下圖:三、Swing的常用組件—JLabelJLabel(標(biāo)簽)是用戶(hù)只能查看不能修改的文本/圖像顯示區(qū)域。
三、Swing的常用組件--JTextFieldJTextField(單行文本域)是一個(gè)單行條形文本區(qū),能夠接收輸入、顯示輸出。獲得文本域的內(nèi)容x=Integer.parseInt(text1.getText().trim());
重新設(shè)置文本域的內(nèi)容resultText.setText(s);
三、Swing的常用組件--JTextFieldsetText(Strings)設(shè)置文本框中的文本getText()獲取文本框中的文本setEditable(booleanb)指定文本框的可編輯性。創(chuàng)建的文本框默認(rèn)為可編輯的獲取兩個(gè)文本域的輸入并求和,然后顯示在第三個(gè)文本域中。三、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(口令框)接受用戶(hù)的輸入,但不會(huì)真正顯示出來(lái),而是顯示回顯符。密碼域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實(shí)戰(zhàn):實(shí)現(xiàn)上面的圖形用戶(hù)界面。Swing的常用組件--JTextAreaJTextArea(多行文本框)可以輸入或輸出多行文本。設(shè)定是否可編輯
setEditable(Booleanb)JTextArea(Stringtext,introws,intcolumns)指定文本創(chuàng)建文本區(qū),指定行數(shù)和列數(shù)換行方式:手動(dòng)換行自動(dòng)換行:通過(guò)設(shè)置換行屬性來(lái)避免手動(dòng)換行。增加滾動(dòng)條:通過(guò)把文本區(qū)插入到一個(gè)滾動(dòng)窗格中來(lái)實(shí)現(xiàn)。這也是給其他組件添加滾動(dòng)條的方法。textArea.setLineWrap(true);JScrollPanescrollPane=newJScrollPane(textArea);Swing的常用組件--JTextArea文本區(qū)的三種顯示方式Swing的常用組件--JTextArea例:創(chuàng)建包含文本區(qū)、文本框和“提交”按鈕的窗口。
在文本區(qū)中輸入文字,單擊“提交”按鈕,文本
框中會(huì)出現(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);//自動(dòng)換行,只添加垂直滾動(dòng)條
JScrollPanescrollPane=newJScrollPane(ta);//加滾動(dòng)條
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),允許用戶(hù)從一組選項(xiàng)中進(jìn)行多個(gè)選擇。
設(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)事件類(lèi)事件響應(yīng)用戶(hù)點(diǎn)擊復(fù)選框使其選中狀態(tài)發(fā)生變化時(shí)會(huì)引發(fā)
ItemEvent事件。實(shí)現(xiàn)ItemListener接口的itemStateChanged()方法。publicvoidaddItemListener(ItemListenerl)
設(shè)置復(fù)選框的事件監(jiān)聽(tīng)器。查閱JDK文檔,學(xué)習(xí)ItemEvent類(lèi)的常用方法。例題:創(chuàng)建如下窗口,包含三個(gè)復(fù)選框和一個(gè)面板,選中某一復(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("藍(lán)色"); 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(單選按鈕)通常是成組使用的,可以通過(guò)ButtonGroup類(lèi)進(jìn)行管理。常用的構(gòu)造方法有:JRadioButton()JRadioButton(Iconicon)JRadioButton(Icon,booleanselected)JRadioButton(Stringtext)JRadioButton(Stringtext,booleanselected)JRadioButton(Stringtext,Iconicon)JRadioButton(Stringtext,Iconicon,booleanselected)單選框(JRadioButton)示例要保證三個(gè)JRadioButton的互斥性應(yīng)該把這三個(gè)控件放到同一個(gè)ButtonGroup中Swing的常用組件—組合框JComboBoxJComboBox(組合框)是一種“多選一”的組件,可編輯每項(xiàng)的內(nèi)容,而且每項(xiàng)的內(nèi)容可以是任意類(lèi)。當(dāng)用戶(hù)選取組合框中的某一選擇項(xiàng)時(shí),可激發(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);
對(duì)組合框是否能夠被編輯也可以進(jìn)行設(shè)置。
jobsBox.setEditable(true);Swing的常用組件—組合框JComboBox組合框的內(nèi)容可以動(dòng)態(tài)變化addItem方法:把條目添加到列表的末尾;insertItermAt方法:將新條目添加到列表的任何位置;removeItem方法和removeItemAt方法:刪除指定條目;removeAllItems方法:刪除所有條目。Swing的常用組件—組合框JComboBoxjobsBox.insertItermAt(“job7”,6);//在第7個(gè)位置增加“job7”條目。jobsBox.removeItem(“job7”);//刪除“job7”條目。jobsBox.removeItemAt(5);//刪除第6個(gè)條目,即“job6”。jobsBox.removeAllItems();//刪除所有條目。當(dāng)選擇組合框的條目時(shí),會(huì)產(chǎn)生單擊事件(ActionEvent)和項(xiàng)事件(ItemEvent)。組合框事件處理方法說(shuō)明
publicObjectgetSelectedItem()返回當(dāng)前選中項(xiàng)。注意類(lèi)型。
publicintgetSelectedIndex()返回選中項(xiàng)的位置。列表中第一項(xiàng)的位置是0。組合框(JComboBox)常用的事件處理方式Swing的常用組件—列表框(JList)JList(列表框)向用戶(hù)顯示一組選項(xiàng)構(gòu)造方法publicJList()
構(gòu)造空列表publicJList(Object[]
listData)
以數(shù)組中的元素構(gòu)造一個(gè)JList。
String[]fontSize={“小四”,“四號(hào)”,“小五”,“五號(hào)”};JListlist=newJList(fontSize);publicJList(Vector<?>
listData)
以Vector中的元素構(gòu)造一個(gè)
JList。建立列表框前,需要指定所顯示的列表?xiàng)l目:String[]courses={“Math”,“English”,“Physics”,“Chemic”,“Biology”,“Politics”};JListcourseList=newJList(courses);如果列表框比較長(zhǎng),而顯示屏幕比較小,可以設(shè)置列表中顯示的行數(shù),同時(shí)使用滾動(dòng)條:courseList.setVisibleRowCount(4);JScrollPanelistScrollPane=newJScrollPane(courseList);Swing的常用組件—列表框(JList)選擇列表框中的多個(gè)條目有兩種方式:連續(xù)條目選擇和間斷條目選擇。用戶(hù)選擇列表框條目時(shí),列表框就會(huì)產(chǎn)生選擇事件。將列表選擇監(jiān)聽(tīng)器ListSelectionListener添加給列表組件,并在該監(jiān)聽(tīng)器中實(shí)現(xiàn)valueChanged方法:courseList.addListSelectionListener(newcourseListener());...classcourseListenerimplementsListSelectionListener{ publicvoidvalueChanged(ListSelectionEventevent) {...}}獲得用戶(hù)所選擇的列表框條目以及條目所在的索引號(hào)需要使用getSelectedValues方法和getSelectedIndices方法:Object[]selectedCourses=courseList.getSelectedValues();int[]selectedIndexCourses=courseList.getSelectedIndices();Swing的常用組件—列表框(JList)JList(列表框)可以選擇一項(xiàng)或多項(xiàng)。列表框查閱JDK文檔,學(xué)習(xí)JList類(lèi)的常用方法及相關(guān)事件。Swing的常用組件—列表框(JList)練習(xí)例:創(chuàng)建一個(gè)包含列表框和文本框的窗口,要求單擊或雙擊列表框中某一選項(xiàng)后,文本框中顯示該選項(xià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類(lèi)型有三種:JMenuItemJCheckBoxMenuItemJRadioButtonMenuItemJMenuBarJMenuJMenuItem菜單的分類(lèi)菜單條式菜單(下拉菜單)彈出式菜單菜單組件與其他組件不同,不能放入普通的容器,也無(wú)法用布局管理器對(duì)其加以控制,只能被放入菜單容器中。Swing的常用組件—菜單下拉式菜單
下拉式菜單主要由三部分組成菜單條(JMenuBar)菜單(JMenu)菜單項(xiàng)(JMenuItem)。菜單欄菜單條菜單菜單項(xiàng)創(chuàng)建菜單欄
JMenuBarmenuBar=newJMenuBar();setJMenuBar(menuBar);創(chuàng)建菜單JMenufileMenu=newJMenu("File");創(chuàng)建子菜單。JMenuoptionMenu=newJMenu("Option");創(chuàng)建菜單項(xiàng)
JMenuItemnewfile=newJMenuItem("新建");創(chuàng)建下拉式菜單將菜單項(xiàng)加入到子菜單或菜單中。將子菜單加入到菜單中。將菜單加入到菜單欄中。創(chuàng)建菜單的步驟importjavax.swing.*;importjava.awt.event.*;publicclassMenuDemoextendsJFrameimplementsActionListener{ JTextAreatf=newJTextArea(); JMenuBarmbar=newJMenuBar(); JMenumenu=newJMenu("文件"); JMenuItemnewfile=newJMenuItem("新建"); JMenuItemopen=newJMenuItem("打開(kāi)"); JMenuItemclose=newJMenuItem("關(guān)閉"); JMenuItemquit=newJMenuItem("退出");
創(chuàng)建菜單的步驟publicMenuDemo(){ super("Menu實(shí)例");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("打開(kāi)文件"); 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)建一般的菜單項(xiàng)幾乎一樣,只需注意復(fù)選框和單選按鈕的不同構(gòu)造方法以及單選按鈕組的構(gòu)建:創(chuàng)建單選按鈕菜單項(xiàng)“Forward”,并將“Forward”菜單項(xiàng)加入到“Search”菜單中。ButtonGroupgroup=newButtonGroup();forwardItem=newJRadioButtonMenuItem("Forward");group.add(forwardItem);searchMenu.add(forwardItem);創(chuàng)建復(fù)選框菜單項(xiàng)“ToolBar”,并加入到子菜單中。JCheckBoxMenuItemtoolItem=newJCheckBoxMenuItem("ToolBar");optionMenu.add(toolItem);創(chuàng)建復(fù)選框和單選按鈕菜單項(xiàng)
菜單項(xiàng)的使用狀態(tài)菜單項(xiàng)能夠被選取取決于菜單項(xiàng)的啟用和禁用狀態(tài)://初始設(shè)置“Save”菜單項(xiàng)為禁用狀態(tài)。saveItem.setEnabled(false);快捷鍵和加速器快捷鍵顯示為帶有下劃線的字母,加速器則顯示為菜單項(xiàng)旁邊的組合鍵。://設(shè)置菜單的快捷鍵。fileMenu.setMnemonic('F');//設(shè)置“Exit”菜單項(xiàng)的快捷鍵為“T”。JMenuItemexitItem=newJMenuItem("Exit",'T');//設(shè)置“Exit”菜單項(xiàng)的加速器為“Ctrl+T”。exitItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_T,InputEvent.CTRL_MASK));Swing的常用組件—菜單彈出式菜單彈出式菜單的創(chuàng)建和菜單的創(chuàng)建基本相同,也需要新建一個(gè)彈出式菜單后再加入菜單項(xiàng)。彈出式菜單。popup=newJPopupMenu();新建彈出式菜單中的“Cut”菜單項(xiàng)和監(jiān)聽(tīng)器。cutItemPop=newJMenuItem("Cut",'C');popup.add(cutItemPop);Swing的常用組件—菜單菜單示例
創(chuàng)建菜單欄創(chuàng)建菜單加入到菜單欄中創(chuàng)建菜單項(xiàng)加入到菜單中最后將整個(gè)菜單欄加入到某個(gè)容器中(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("畫(huà)圖");menuHelp=newMenu("幫助");myMenuBar.add(menuDraw);myMenuBar.add(menuHelp);itemCircle=newMenuItem("畫(huà)圓");itemRect=newMenuItem("畫(huà)矩形");itemLine=newMenuItem("畫(huà)線");
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()==“畫(huà)圓”)
f.getGraphics().drawOval(100,100,150,150); elseif(e.getActionCommand()==“畫(huà)矩形”)
f.getGraphics().drawRect(50,1a00,100,100); elseif(e.getActionCommand()==“畫(huà)線”)
f.getGraphics().drawLine(100,100,200,200); }
publicstaticvoidmain(Stringarg[]){(newMenuExp()).display();}NCEPU創(chuàng)建JMenuItem先創(chuàng)建一個(gè)JMenuBar對(duì)象再創(chuàng)建若干個(gè)JMenu對(duì)象添加處理事件添加JMenuItem到JMenu添加JMenu到JMenuBar添加JMenuBar到容器NCEPU先創(chuàng)建一個(gè)JMenuBar對(duì)象再創(chuàng)建若個(gè)JMenu對(duì)象Swing常用的組件—對(duì)話框?qū)υ捒蚍譃槟J綄?duì)話框和無(wú)模式對(duì)話框。模式對(duì)話框必須在用戶(hù)處理完后才允許用戶(hù)與主窗口繼續(xù)進(jìn)行交互。無(wú)模式對(duì)話框允許用戶(hù)同時(shí)在對(duì)話框和程序剩余部分中輸入信息。在Swing中,提供了四種簡(jiǎn)單的對(duì)話框:showMessageDialog:顯示一條消息等待用戶(hù)點(diǎn)擊OK;showConfirmDialog:顯示一條消息并等待確認(rèn);showOptionDialog:顯示一條消息并等待用戶(hù)在一組自定義選項(xiàng)中的選擇;showInputDialog:顯示一條消息并等待用戶(hù)的輸入。以showConfirmDialog為例:對(duì)話框的使用
底部按鈕的類(lèi)型和對(duì)話框有密切的關(guān)系,對(duì)于showMessageDialog和showInputDialog對(duì)話框來(lái)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 陜西省西安市蓮湖區(qū)重點(diǎn)名校2025年初三下學(xué)期第三次考試語(yǔ)文試題試卷含解析
- 江蘇省揚(yáng)州市儀征市2025屆普通高中初三線上統(tǒng)一測(cè)試生物試題理試題含解析
- 閩南師范大學(xué)《專(zhuān)業(yè)軟件應(yīng)用(水文與水資源工程)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年音樂(lè)藝術(shù)專(zhuān)業(yè)基礎(chǔ)知識(shí)考試試卷及答案
- 呂梁學(xué)院《混凝土結(jié)構(gòu)與砌體結(jié)構(gòu)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年市場(chǎng)營(yíng)銷(xiāo)專(zhuān)業(yè)碩士入學(xué)考試試卷及答案
- 塔里木職業(yè)技術(shù)學(xué)院《生物醫(yī)學(xué)專(zhuān)題》2023-2024學(xué)年第二學(xué)期期末試卷
- 沙洲職業(yè)工學(xué)院《西醫(yī)外科學(xué)A》2023-2024學(xué)年第一學(xué)期期末試卷
- 天津農(nóng)學(xué)院《英語(yǔ)寫(xiě)作基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 山西省晉中市2025屆高中畢業(yè)班第一次模擬(語(yǔ)文試題文)試卷含解析
- 2025國(guó)際護(hù)士節(jié)護(hù)士壓力與情緒管理講座課件
- 2025年消防設(shè)施操作員(監(jiān)控類(lèi))考試復(fù)習(xí)重點(diǎn)題(附答案)
- (二模)2025年深圳市高三年級(jí)第二次調(diào)研考試政治試卷(含答案)
- 2025年山東省應(yīng)急管理普法知識(shí)競(jìng)賽參考試題庫(kù)大全-上(單選題)
- 102解二元一次方程組【10個(gè)必考點(diǎn)】(必考點(diǎn)分類(lèi)集訓(xùn))(人教版2024)
- 鄰水現(xiàn)代農(nóng)業(yè)發(fā)展集團(tuán)有限公司招聘筆試題庫(kù)2025
- 鄰水國(guó)有資產(chǎn)經(jīng)營(yíng)管理集團(tuán)有限公司2025年公開(kāi)考試招聘工作人員(8人)筆試參考題庫(kù)附帶答案詳解
- 檔案管理員工作
- 兒童支氣管哮喘診斷與防治指南解讀(2025年)課件
- 腫瘤專(zhuān)科進(jìn)修匯報(bào)護(hù)理
- 腎上腺皮質(zhì)功能減退護(hù)理
評(píng)論
0/150
提交評(píng)論