Java圖形用戶界面
《Java圖形用戶界面》由會(huì)員分享,可在線閱讀,更多相關(guān)《Java圖形用戶界面(89頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、Java圖形用戶界面 Java界面設(shè)計(jì)的用途n Java 的圖形界面工具包,可以用于工具類軟件開發(fā)、管理類軟件開發(fā)、通用客戶端開發(fā)、銀行客戶端軟件開發(fā)、Eclipse 插件開發(fā)等方向。在許多知名的大型軟件中,都能夠見到 Java 的身影,如思維導(dǎo)圖軟件、Eclipse、IDEA 開發(fā)環(huán)境等。 2 AWT簡(jiǎn)介n Abstract Windows Toolkit(AWT)是最原始的 Java GUI 工具包。它是一個(gè)非常簡(jiǎn)單的具有有限 GUI 組件、布局管理器和事件的工具包(如窗體、文本標(biāo)簽、按鈕、菜單等)。 3 Swing簡(jiǎn)介n Swing 是 Sun 開發(fā)的一個(gè)經(jīng)過仔細(xì)設(shè)計(jì)的、靈活而強(qiáng)大的 G
2、UI 工具包。Swing 是在 AWT 組件基礎(chǔ)上構(gòu)建的。Swing 使用了 AWT 的事件模型和支持類,例如 Colors、Images 和 Graphics。Swing 組件、布局管理器以及事件比 AWT 提供的組件集更為廣泛,完全滿足各種開發(fā)需求。 4 SWT簡(jiǎn)介n SWT 也是基于一個(gè)對(duì)等體實(shí)現(xiàn)的,在這一點(diǎn)上它與 AWT 非常類似。基于 SWT 的 GUI 既具有主機(jī)外觀,又具有主機(jī)的性能。這樣就避免了使用 AWT 和 Swing 而引起的大部分問題。nSWT是IBM為它的Eclipse集成開發(fā)環(huán)境而開發(fā)的圖形用戶界面工具。SWT可以在Eclipse環(huán)境外使用,而且提供對(duì)操作系統(tǒng)本地圖
3、形用戶界面的直接訪問。因此,基于SWT的Java應(yīng)用程序擁有本地的圖形用戶界面并且可以和本地別的應(yīng)用程序和部件集成在一起。 5 如何選擇 GUI 工具包n AWT、Swing、SWT是 Java 中的三大 GUI 工具包,其中 Swing 是最靈活、強(qiáng)大的 GUI 工具包,所以在界面開發(fā)中,首選 Swing ,它可以勝任絕大多數(shù)開發(fā)工作。 6 7 本講內(nèi)容n 1、AWT事件處理模型n 2、布局管理器n 3、Swing簡(jiǎn)介n 4、Swing組件和容器 8 用AWT生成圖形化用戶界面 抽象窗口工具包AWT (Abstract Window Toolkit) 是 API為Java 程序提供的建立圖形
4、用戶界面GUI (Graphics User Interface)工具集,AWT可用于Java的applet和applications中。它支持圖形用戶界面編程的功能包括: 用戶界面組件;事件處理模型;圖形和圖像工具,包括形狀、顏色和字體類;布局管理器,可以進(jìn)行靈活的窗口布局而與特定窗口的尺寸和屏幕分辨率無關(guān);數(shù)據(jù)傳送類,可以通過本地平臺(tái)的剪貼板來進(jìn)行剪切和粘貼。 9 1 用AWT生成圖形化用戶界面n java.awt包中包含了一個(gè)完整的類集以支持GUI程序的設(shè)計(jì)(重量級(jí)構(gòu)件)事件類字體類GraphicsComponent顏色類布局管理類java.lang.ObjectCheckbox Con
5、tainerButton Window Panel AppletDialogFrameList圖象類菜單類 10 1.1 java.awt包 n java.awt包中提供了GUI設(shè)計(jì)所使用的類和接口。 n java.awt包提供了基本的java程序的GUI設(shè)計(jì)工具。主要包括下述三個(gè)概念:組件Component容器Container 布局管理器-LayoutManager 11 1.2 組件和容器 n Java的圖形用戶界面的最基本組成部分是組件(Component),組件是一個(gè)可以以圖形化的方式顯示在屏幕上并能與用戶進(jìn)行交互的對(duì)象,例如一個(gè)按鈕,一個(gè)標(biāo)簽等。組件不能獨(dú)立地顯示出來,必須將組件放
6、在一定的容器中才可以顯示出來。 n類java.awt.Component是許多組件類的父類,Component類中封裝了組件通用的方法和屬性,如圖形的組件對(duì)象、大小、顯示位置、前景色和背景色、邊界、可見性等,因此許多組件類也就繼承了Component類的成員方法和成員變量,相應(yīng)的成員方法包括:getComponentAt(int x, int y) getFont()getForeground() getName() getSize() paint(Graphics g)repaint() update()setVisible(boolean b) setSize(Dimension d)se
7、tName(String name)等 12 1.2 組件和容器n容器(Container)也是一個(gè)類,實(shí)際上是Component的子類,因此容器本身也是一個(gè)組件,具有組件的所有性質(zhì),但是它的主要功能是容納其它組件和容器。n布局管理器(LayoutManager):每個(gè)容器都有一個(gè)布局管理器,當(dāng)容器需要對(duì)某個(gè)組件進(jìn)行定位或判斷其大小尺寸時(shí),就會(huì)調(diào)用其對(duì)應(yīng)的布局管理器。 n為了使我們生成的圖形用戶界面具有良好的平臺(tái)無關(guān)性,Java語言中,提供了布局管理器這個(gè)工具來管理組件在容器中的布局,而不使用直接設(shè)置組件位置和大小的方式。 13 1.2 組件和容器n在程序中安排組件的位置和大小時(shí),應(yīng)該注意以下
8、兩點(diǎn): 1容器中的布局管理器負(fù)責(zé)各個(gè)組件的大小和位置,因此用戶無法在這種情況下設(shè)置組件的這些屬性。如果試圖使用Java 語言提供的setLocation(),setSize(),setBounds() 等方法,則都會(huì)被布局管理器覆蓋。 2如果用戶確實(shí)需要親自設(shè)置組件大小或位置,則應(yīng)取消該容器的布局管理器,方法為:setLayout(null); 14 1.3 常用容器 n容器java.awt.Container是Component的子類,一個(gè)容器可以容納多個(gè)組件,并使它們成為一個(gè)整體。容器可以簡(jiǎn)化圖形化界面的設(shè)計(jì),以整體結(jié)構(gòu)來布置界面。所有的容器都可以通過add()方法向容器中添加組件。有三種
9、類型的容器:Window、Panel、ScrollPane,常用的有Panel, Frame, Applet。 15 1.3 常用容器-Framen 1Frame例: import java.awt.*;public class MyFrame extends Framepublic static void main(String args )MyFrame fr = new MyFrame(Hello Out There!); /構(gòu)造方法fr.setSize(200,200); /設(shè)置Frame的大小,缺省為(0,0)fr.setBackground(Color.red);/設(shè)置Frame的
10、背景,缺省為紅色fr.setVisible(true); /設(shè)置Frame為可見,缺省為不可見public MyFrame (String str)super(str); /調(diào)用父類的構(gòu)造方法 16 1.3 常用容器-Framen一般我們要生成一個(gè)窗口,通常是用Window的子類Frame來進(jìn)行實(shí)例化,而不是直接用到Window類。Frame的外觀就像我們平常在windows系統(tǒng)下見到的窗口,有標(biāo)題、邊框、菜單、大小等等。每個(gè)Frame的對(duì)象實(shí)例化以后,都是沒有大小和不可見的,因此必須調(diào)用setSize( )來設(shè)置大小,調(diào)用setVisible(true)來設(shè)置該窗口為可見的。 n另外,AWT
11、在實(shí)際的運(yùn)行過程中是調(diào)用所在平臺(tái)的圖形系統(tǒng),因此同樣一段AWT程序在不同的操作系統(tǒng)平臺(tái)下運(yùn)行所看到的圖形系統(tǒng)是不一樣的。例如在windows下運(yùn)行,則顯示的窗口是windows風(fēng)格的窗口;而在UNIX下運(yùn)行時(shí),則顯示的是UNIX風(fēng)格的窗口。 17 1.3 常用容器n 2Panel n Panel與Frame類似,可以添加到Frame中。 18 1.4 LayoutManager 布局管理器n Java為了實(shí)現(xiàn)跨平臺(tái)的特性并且獲得動(dòng)態(tài)的布局效果,Java將容器內(nèi)的所有組件安排給一個(gè)布局管理器負(fù)責(zé)管理,如:排列順序,組件的大小、位置,當(dāng)窗口移動(dòng)或調(diào)整大小后組件如何變化等功能授權(quán)給對(duì)應(yīng)的容器布局管理
12、器來管理,不同的布局管理器使用不同算法和策略,容器可以通過選擇不同的布局管理器來決定布局。 n布局管理器主要包括:FlowLayout,BorderLayout,GridLayout,CardLayout,GridBagLayout: 19 1.4 布局管理器-FlowLayoutn 1. FlowLayoutFlowLayout 是Panel,Applet的缺省布局管理器。其組件的放置規(guī)律是從上到下、從左到右進(jìn)行放置,如果容器足夠?qū)?,第一個(gè)組件先添加到容器中第一行的最左邊,后續(xù)的組件依次添加到上一個(gè)組件的右邊,如果當(dāng)前行已放置不下該組件,則放置到下一行的最左邊。 當(dāng)容器的大小發(fā)生變化時(shí),用F
13、lowLayout管理的組件會(huì)發(fā)生變化,其變化規(guī)律是:組件的大小不變,但是相對(duì)位置會(huì)發(fā)生變化。例如上圖中有三個(gè)按鈕都處于同一行,但是如果把該窗口變窄,窄到剛好能夠放下一個(gè)按鈕,則第二個(gè)按鈕將折到第二行,第三個(gè)按鈕將折到第三行。按鈕Open本來在按鈕OK的右邊,但是現(xiàn)在跑到了下面,所以說組件的大小不變,但是相對(duì)位置會(huì)發(fā)生變化。 20 1.4 布局管理器-FlowLayoutn構(gòu)造方法主要下面幾種: FlowLayout(FlowLayout.RIGHT,20,40);/*第一個(gè)參數(shù)表示組件的對(duì)齊方式,指組件在這一行中的位置是居中對(duì)齊、居右對(duì)齊還是居左對(duì)齊,第二個(gè)參數(shù)是組件之間的橫向間隔,第三個(gè)參
14、數(shù)是組件之間的縱向間隔,單位是象素。*/ FlowLayout(FlowLayout.LEFT); /居左對(duì)齊,橫向間隔和縱向間隔都是缺省值5個(gè)象素 FlowLayout(); /缺省的對(duì)齊方式居中對(duì)齊,橫向間隔和縱向間隔都是缺省值5個(gè)象素 n例:Frame f = new Frame(); f.setLayout(new FlowLayout();f.add(new Button(button1);f.add(new Button( button2);f.add(new Button( button3); 21 1.4 布局管理器-BorderLayout n BorderLayout 是W
15、indow,F(xiàn)rame和Dialog的缺省布局管理器。BorderLayout布局管理器把容器分成5個(gè)區(qū)域:North,South,East,West和Center,每個(gè)區(qū)域只能放置一個(gè)組件。f.setLayout(new BorderLayout();f.add(North, new Button(North);/第一個(gè)參數(shù)表示把按鈕添加到容器的North區(qū)域 n在使用BorderLayout的時(shí)候,如果容器的大小發(fā)生變化,其變化規(guī)律為:組件的相對(duì)位置不變,大小發(fā)生變化。例如容器變高了,則North、South區(qū)域不變,West、Center、East區(qū)域變高;如果容器變寬了,West、Ea
16、st區(qū)域不變,North、Center、South區(qū)域變寬。不一定所有的區(qū)域都有組件,如果四周的區(qū)域(West、East、North、South區(qū)域)沒有組件,則由Center區(qū)域去補(bǔ)充,但是如果Center區(qū)域沒有組件,則保持空白:CenterNorthSouthWest East 22 1.4 布局管理器-GridLayoutn使容器中各個(gè)組件呈網(wǎng)格狀布局,平均占據(jù)容器的空間。 n Frame f = new Frame(GridLayout);f.setLayout(new GridLayout(3,2); /容器平均分成3行2列共6格f.add(new Button(1); /添加到第
17、一行的第一格f.add(new Button(2); /添加到第一行的下一格.f.add(new Button(6); /添加到第二行的第三格 23 1.4 布局管理器-CardLayoutCardLayout布局管理器能夠幫助用戶處理兩個(gè)以至更多的成員共享同一顯示空間,它把容器分成許多層,每層的顯示空間占據(jù)整個(gè)容器的大小,但是每層只允許放置一個(gè)組件,當(dāng)然每層都可以利用Panel來實(shí)現(xiàn)復(fù)雜的用戶界面。牌布局管理器(CardLayout)就象一副疊得整整齊齊的撲克牌一樣,有54張牌,但是你只能看見最上面的一張牌,每一張牌就相當(dāng)于牌布局管理器中的每一層。 24 1.4 布局管理器n容器的嵌套在復(fù)雜
18、的圖形用戶界面設(shè)計(jì)中,為了使布局更加易于管理,具有簡(jiǎn)潔的整體風(fēng)格,一個(gè)包含了多個(gè)組件的容器本身也可以作為一個(gè)組件加到另一個(gè)容器中去,容器中再添加容器,這樣就形成了容器的嵌套。下面是一個(gè)容器嵌套的例子。n例:f = new Frame(GUI example 3);bw=new Button(West);bc=new Button(Work space region);f.add(bw,West);f.add(bc,Center);p = new Panel();f.add(p,North);bfile= new Button(File); bhelp= new Button(Help);p.a
19、dd(bfile); p.add(bhelp);f.pack(); f.setVisible(true); 25 1.4 布局管理器小 結(jié):1Frame是一個(gè)頂級(jí)窗口。Frame的缺省布局管理器為BorderLayout。2Panel 無法單獨(dú)顯示,必須添加到某個(gè)容器中。 Panel 的缺省布局管理器為FlowLayout。3當(dāng)把Panel 作為一個(gè)組件添加到某個(gè)容器中后,該P(yáng)anel 仍然可以有自己的布局管理器。因此,可以利用Panel 使得BorderLayout 中某個(gè)區(qū)域顯示多個(gè)組件,達(dá)到設(shè)計(jì)復(fù)雜用戶界面的目的 。4如果采用無布局管理器 setLayout(null),則必須使用set
20、Location(),setSize(),setBounds()等方法手工設(shè)置組件的大小和位置,此方法會(huì)導(dǎo)致平臺(tái)相關(guān),不鼓勵(lì)使用。 26 2 AWT事件處理模型 要能夠讓圖形界面接收用戶的操作,就必須給各個(gè)組件加上事件處理機(jī)制。在事件處理的過程中,主要涉及三類對(duì)象: Event-事件,用戶對(duì)界面操作在java語言上的描述,以類的形式出現(xiàn),例如鍵盤操作對(duì)應(yīng)的事件類是KeyEvent。 Event Source-事件源,事件發(fā)生的場(chǎng)所,通常就是各個(gè)組件,例如按鈕Button。 Event handler-事件處理者,接收事件對(duì)象并對(duì)其進(jìn)行處理的對(duì)象。 27 事件及處理機(jī)制n組件(事件發(fā)生者)觸發(fā)一
21、個(gè)相應(yīng)類型的事 件n此事件由相應(yīng)類型的Listener(事件監(jiān)聽者) 接收并處理Button1事件發(fā)生者接收事件e,并做處理ActionListener事件監(jiān)聽者觸發(fā)ActionEvente點(diǎn)擊 28 事件及處理機(jī)制 調(diào)用按扭的 addActionListener ( ) 方法,為該按扭指定監(jiān)聽者。鼠標(biāo)單擊按扭ActionEvent事件觸發(fā)public void actionPerformed(ActionEvent e)ActionListener接口ActionEvent事件監(jiān)聽者類監(jiān)聽者對(duì)象實(shí)現(xiàn)接口 29 實(shí)現(xiàn)步驟n根據(jù)需要定義相應(yīng)類型的監(jiān)聽者類,在類的 定義中完成事件的處理;n創(chuàng)建事件
22、監(jiān)聽者對(duì)象;n為將會(huì)觸發(fā)事件的組件C注冊(cè)相應(yīng)的事件監(jiān)聽 者對(duì)象(使用C的addXXXListener()方法)。n例:ButtonAct.java 30 publicclassButtonActextendsFrame.publicButtonAct()./為b1注冊(cè)事件監(jiān)聽者B1b1.addActionListener(newB1();add(b1);./利用innerclass結(jié)構(gòu)定義監(jiān)聽者類classB1implementsActionListener/利用actionPerformed方法進(jìn)行事件處理publicvoidactionPerformed(ActionEvente)who.
23、setText(Button1);./: 31 2.1 事件類n與AWT有關(guān)的所有事件類都由java.awt.AWTEvent類派生,它也是EventObject類的子類。AWT事件共有10類,可以歸為兩大類:低級(jí)事件和高級(jí)事件。n java.util.EventObject類是所有事件對(duì)象的基礎(chǔ)父類,所有事件都是由它派生出來的。AWT的相關(guān)事件繼承于java.awt.AWTEvent類,這些AWT事件分為兩大類:低級(jí)事件和高級(jí)事件,低級(jí)事件是指基于組件和容器的事件,當(dāng)一個(gè)組件上發(fā)生事件,如:鼠標(biāo)的進(jìn)入,點(diǎn)擊,拖放等,或組件的窗口開關(guān)等,觸發(fā)了組件事件。高級(jí)事件是基于語義的事件,它可以不和特定
24、的動(dòng)作相關(guān)聯(lián),而依賴于觸發(fā)此事件的類,如在TextField中按Enter鍵會(huì)觸發(fā)ActionEvent事件,滑動(dòng)滾動(dòng)條會(huì)觸發(fā)AdjustmentEvent事件,或是選中項(xiàng)目列表的某一條就會(huì)觸發(fā)ItemEvent事件。 32 2.1 事件類 低級(jí)事件ComponentEvent( 組件事件:組件尺寸的變化,移動(dòng)) ContainerEvent( 容器事件:組件增加,移動(dòng)) WindowEvent( 窗口事件:關(guān)閉窗口,窗口閉合,圖標(biāo)化) FocusEvent( 焦點(diǎn)事件:焦點(diǎn)的獲得和丟失) KeyEvent( 鍵盤事件:鍵按下、釋放) MouseEvent( 鼠標(biāo)事件:鼠標(biāo)單擊,移動(dòng)) 高級(jí)事
25、件(語義事件)ActionEvent(動(dòng)作事件:按鈕按下,TextField中按Enter鍵)AdjustmentEvent(調(diào)節(jié)事件:在滾動(dòng)條上移動(dòng)滑塊以調(diào)節(jié)數(shù)值)ItemEvent(項(xiàng)目事件:選擇項(xiàng)目,不選擇項(xiàng)目改變)TextEvent(文本事件,文本對(duì)象改變) 33 2.2 事件監(jiān)聽器n每類事件都有對(duì)應(yīng)的事件監(jiān)聽器,監(jiān)聽器是接口,根據(jù)動(dòng)作來定義方法。 n AWT的組件類中提供注冊(cè)和注銷監(jiān)聽器的方法: 注冊(cè)監(jiān)聽器:public void add (listener); 注銷監(jiān)聽器:public void remove (listener); 例如Button類:(查API)public c
26、lass Button extends Component public synchronized void addActionListener(ActionListener l); public synchronized void removeActionListener(ActionListener l); 34 2.3 AWT事件及其相應(yīng)的監(jiān)聽器接口 n 1可以聲明多個(gè)接口,接口之間用逗號(hào)隔開。implements MouseMotionListener, MouseListener, WindowListener; n 2可以由同一個(gè)對(duì)象監(jiān)聽一個(gè)事件源上發(fā)生的多種事件:f.addMou
27、seMotionListener(this);f.addMouseListener(this);f.addWindowListener(this);則對(duì)象f 上發(fā)生的多個(gè)事件都將被同一個(gè)監(jiān)聽器接收和處理。 35 2.3 AWT事件及其相應(yīng)的監(jiān)聽器接口n 3事件處理者和事件源處在同一個(gè)類中。本例中事件源是Frame f,事件處理者是類ThreeListener,其中事件源Frame f是類ThreeListener的成員變量。在這里所有的事件偵聽器方法都要在主類中聲明。 public class ThreeListener implements MouseMotionListener,Mouse
28、Listener,WindowListener f = new Frame(Three listeners example); f.addMouseMotionListener(this); /注冊(cè)監(jiān)聽器MouseMotionListenerf.addMouseListener(this); /注冊(cè)監(jiān)聽器MouseListenerf.addWindowListener(this); /注冊(cè)監(jiān)聽器WindowListener 36 2.3 AWT事件及其相應(yīng)的監(jiān)聽器接口n 4可以通過事件對(duì)象獲得詳細(xì)資料,比如本例中就通過事件對(duì)象獲得了鼠標(biāo)發(fā)生時(shí)的坐標(biāo)值。public void mouseDrag
29、ged(MouseEvent e) String s=Mouse dragging :X=+e.getX()+Y=+e.getY();tf.setText(s); n Java語言類的層次非常分明,因而只支持單繼承,為了實(shí)現(xiàn)多重繼承的能力,Java用接口來實(shí)現(xiàn),一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,這種機(jī)制比多重繼承具有更簡(jiǎn)單、靈活、更強(qiáng)的功能。在AWT中就經(jīng)常用到聲明和實(shí)現(xiàn)多個(gè)接口。記住無論實(shí)現(xiàn)了幾個(gè)接口,接口中已定義的方法必須一一實(shí)現(xiàn),如果對(duì)某事件不感興趣,可以不具體實(shí)現(xiàn)其方法,而用空的方法體來代替。但卻必須所有方法都要寫上。 37 2.4 事件適配器n Java語言為一些Listener接口提供了適配
30、器(Adapter)類。可以通過繼承事件所對(duì)應(yīng)的Adapter類,重寫需要方法,無關(guān)方法不用實(shí)現(xiàn)。事件適配器為我們提供了一種簡(jiǎn)單的實(shí)現(xiàn)監(jiān)聽器的手段, 可以縮短程序代碼。但是,由于java的單一繼承機(jī)制,當(dāng)需要多種監(jiān)聽器或此類已有父類時(shí),就無法采用事件適配器了。 38 2.4 事件適配器n 1事件適配器-EventAdapter下例中采用了鼠標(biāo)適配器:import java.awt.*;import java.awt.event.*;public class MouseClickHandler extends MouseAdaperpublic void mouseClicked(MouseEv
31、ent e) /只實(shí)現(xiàn)需要的方法 n java.awt.event包中定義的事件適配器類包括以下幾個(gè):1ComponentAdapter( 組件適配器) 2ContainerAdapter( 容器適配器) 3FocusAdapter( 焦點(diǎn)適配器) 4KeyAdapter( 鍵盤適配器) 5MouseAdapter( 鼠標(biāo)適配器) 6MouseMotionAdapter( 鼠標(biāo)運(yùn)動(dòng)適配器)7WindowAdapter( 窗口適配器) 39 2.4 事件適配器n 2. 用內(nèi)部類實(shí)現(xiàn)事件處理內(nèi)部類(inner class)是被定義于另一個(gè)類中的類,使用內(nèi)部類的主要原因是由于: 一個(gè)內(nèi)部類的對(duì)象可訪
32、問外部類的成員方法和變量,包括私有的成員。 實(shí)現(xiàn)事件監(jiān)聽器時(shí),采用內(nèi)部類、匿名類編程非常容易實(shí)現(xiàn)其功能。 編寫事件驅(qū)動(dòng)程序,內(nèi)部類很方便。 注意:使用的內(nèi)部類不能在靜態(tài)方法(如main方法)中調(diào)用。 40 import java.awt.* ;import java.awt.event.*;public class InnerClassprivate Frame f;private TextField tf;public InnerClass()f=new Frame(Inner classes example);tf=new TextField(30);public voidi launch
33、Frame()Label label=new Label(Click and drag the mouse);f.add(label,BorderLayout.NORTH);f.add(tf,BorderLayout.SOUTH);f.addMouseMotionListener(new MyMouseMotionListener();/*參數(shù)為內(nèi)部類對(duì)象*/f.setSize(300,200);f.setVisible(true); class MyMouseMotionListener extends MouseMotionAdapter /*內(nèi)部類開始*/public void mous
34、eDragged(MouseEvent e) String s=Mouse dragging: x=+e.getX()+Y=+e.getY();tf.setText(s); ; public static void main(String args) InnerClass obj=new InnerClass();obj.launchFrame();/內(nèi)部類結(jié)束 41 2.4 事件適配器n 3匿名類(Anonymous Class)當(dāng)一個(gè)內(nèi)部類的類聲名只是在創(chuàng)建此類對(duì)象時(shí)用了一次,而且要產(chǎn)生的新類需繼承于一個(gè)已有的父類或?qū)崿F(xiàn)一個(gè)接口,才能考慮用匿名類,由于匿名類本身無名,因此它也就不存在構(gòu)造方
35、法,它需要顯示地調(diào)用一個(gè)無參的父類的構(gòu)造方法,并且重寫父類的方法。所謂的匿名就是該類連名字都沒有,只是顯示地調(diào)用一個(gè)無參的父類的構(gòu)造方法。 n f.addMouseMotionListener(new MouseMotionAdapter() /匿名類開始public void mouseDragged(MouseEvent e)String s=Mouse dragging: x=+e.getX()+Y=+e.getY();tf.setText(s); ); /匿名類結(jié)束 42 3 AWT組件庫(kù) n本節(jié)從應(yīng)用的角度進(jìn)一步介紹AWT的一些組件,目的使大家加深對(duì)AWT的理解,掌握如何用各種組件構(gòu)
36、造圖形化用戶界面,學(xué)會(huì)控制組件的顏色和字體。下面是一些常用的組件的介紹: 43 3 AWT組件庫(kù)n 1 按鈕(Button)按鈕是最常用的一個(gè)組件,其構(gòu)造方法是:Button b = new Button(Quit); 當(dāng)按鈕被點(diǎn)擊后,會(huì)產(chǎn)生ActionEvent事件,需ActionListener接口進(jìn)行監(jiān)聽和處理事件。ActionEvent的對(duì)象調(diào)用getActionCommand()方法可以得到按鈕的標(biāo)識(shí)名,缺省按鈕名為label。用setActionCommand()可以為按鈕設(shè)置組件標(biāo)識(shí)符。 44 3 AWT組件庫(kù)n 2.復(fù)選框 (Checkbox)復(fù)選框提供簡(jiǎn)單的on/off開關(guān),
37、旁邊顯示文本標(biāo)簽。構(gòu)造方法如下:setLayout(new GridLayout(3,1);add(new Checkbox(one,null,true);add(new Checkbox(two);add(new Checkbox(three);復(fù)選框用ItemListener 來監(jiān)聽I(yíng)temEvent事件,當(dāng)復(fù)選框狀態(tài)改變時(shí)用getStateChange()獲取當(dāng)前狀態(tài)。使用getItem()獲得被修改復(fù)選框的字符串對(duì)象。 n class Handler implements ItemListener public void itemStateChanged(ItemEvent ev)St
38、ring state = deselected;if (ev.getStateChange() = = ItemEvent.SELECTED)state = selected System.out.println(ev.getItem()+ +state); 45 3 AWT組件庫(kù)n 3.復(fù)選框組(CheckboxGroup)使用復(fù)選框組,可以實(shí)現(xiàn)單選框的功能。方法如下: setLayout(new GridLayout(3, 1);CheckboxGroup cbg = new CheckboxGroup();add(new Checkbox(one, cbg, true);add(new
39、Checkbox(two, cbg, false);add(new Checkbox(three, cbg, false); 46 3 AWT組件庫(kù)n 4. 下拉式菜單(Choice)下拉式菜單每次只能選擇其中的一項(xiàng),它能夠節(jié)省顯示空間,適用于大量選項(xiàng)。Choice Colorchooser=new Choice();Colorchooser.add(Green);Colorchooser.add(Red);Colorchooser.add(Blue);Choice 用ItemListener接口來進(jìn)行監(jiān)聽 47 3 AWT組件庫(kù)n 5. Canvas一個(gè)應(yīng)用程序必須繼承Canvas類才能獲得
40、有用的功能,比如創(chuàng)建一個(gè)自定義組件。如果想在畫布上完成一些圖形處理,則Canvas類中的paint()方法必須被重寫。Canvas組件監(jiān)聽各種鼠標(biāo),鍵盤事件。當(dāng)在Canvas組件中輸入字符時(shí),必須先調(diào)用requestFocus()方法。 48 3 AWT組件庫(kù)n 6. 單行文本輸入?yún)^(qū)(TextField)只能顯示一行,當(dāng)回車鍵被按下時(shí),會(huì)發(fā)生ActionEvent事件,可以通過ActionListener中的actionPerformed()方法對(duì)事件進(jìn)行相應(yīng)處理??梢允褂胹etEditable(boolean)方法設(shè)置為只讀屬性。單行文本輸入?yún)^(qū)構(gòu)造方法如下:TextField tf1,tf2
41、,tf3,tf4:tf1=new TextField(); tf2=new TextField(,20); /顯示區(qū)域?yàn)?0列tf3=new TextField(Hello!); /按文本區(qū)域大小顯示tf4=new TextField(Hello!,30); /初始文本為Hello!, 顯示區(qū)域?yàn)?0列 49 3 AWT組件庫(kù)n 7. 文本輸入?yún)^(qū)(TextArea)TextArea可以顯示多行多列的文本。使用setEditable(boolean)方法,可以將其設(shè)置為只讀的。在TextArea中可以顯示水平或垂直的滾動(dòng)條。要判斷文本是否輸入完畢,可以在TextArea旁邊設(shè)置一個(gè)按鈕,通過按鈕
42、點(diǎn)擊產(chǎn)生的ActionEvent對(duì)輸入的文本進(jìn)行處理。 n 8. 列表(List)列表中提供了多個(gè)文本選項(xiàng),列表支持滾動(dòng)條,可以瀏覽多項(xiàng)List lst=new List(4,false); /兩個(gè)參數(shù)分別表示顯示的行數(shù)、是否允許多選lst.add(Venus);lst.add(Earth);lst.add(JavaSoft); lst.add(Mars);cnt.add(lst); 50 3 AWT組件庫(kù)n 9. 框架(Frame)Frame是頂級(jí)窗口,可以顯示標(biāo)題,重置大小。當(dāng)Frame被關(guān)閉,將產(chǎn)生WindowEvent事件,F(xiàn)rame無法直接監(jiān)聽鍵盤輸入事件。 n 10. 對(duì)話框(Di
43、alog)它是Window類的子類。對(duì)話框和一般窗口的區(qū)別在于它依賴于其它窗口。對(duì)話框分為非模式(non-modal)和模式(modal)兩種。n 11. 文件對(duì)話框(Filedialog)當(dāng)用戶想打開或存儲(chǔ)文件時(shí),使用文件對(duì)話框進(jìn)行操作。主要代碼如下: FileDialog d=new FileDialog(ParentFr,FileDialog);d.setVisible(true);String filename=d.getFile(); 51 3 AWT組件庫(kù)n 12. 菜單(Menu)無法直接將菜單添加到容器的某一位置,也無法使用布局管理器對(duì)其加以控制。菜單只能被添加?quot;菜單
44、容器(MenuBar)中。 n 13. MenuBar只能被添加到Frame對(duì)象中,作為整個(gè)菜單樹的根基。Frame fr = new Frame(MenuBar);MenuBar mb = new MenuBar();fr.setMenuBar(mb);fr.setSize(150,100);fr.setVisible(true); 52 3 AWT組件庫(kù)n 14. Menu下拉菜單。它可以被添加到MenuBar中或其它Menu中。Frame fr = new Frame(MenuBar);MenuBar mb = new MenuBar();fr.setMenuBar(mb);Menu m
45、1 = new Menu(File);mb.add(m1);n 15. MenuItemMenuItem是菜單樹中的葉子節(jié)點(diǎn)。MenuItem通常被添加到一個(gè)Menu中。對(duì)于MenuItem對(duì)象可以添加ActionListener,使其能夠完成相應(yīng)的操作。Menu m1 = new Menu(File);MenuItem mi1 = new MenuItem(Save); 53 本講小結(jié)-AWT用AWT來生成圖形化用戶界面時(shí),組件和容器的概念非常重要。組件是各種各樣的類,封裝了圖形系統(tǒng)的許多最小單位,例如按鈕、窗口等等;而容器也是組件,它的最主要的作用是裝載其它組件,但是象Panel這樣的容器
46、也經(jīng)常被當(dāng)作組件添加到其它容器中,以便完成雜的界面設(shè)計(jì)。布局管理器是java語言與其它編程語言在圖形系統(tǒng)方面較為顯著的區(qū)別,容器中各個(gè)組件的位置是由布局管理器來決定的,共有5種布局管理器,每種布局管理器都有自己的放置規(guī)律。事件處理機(jī)制能夠讓圖形界面響應(yīng)用戶的操作,主要涉及到事件源、事件、事件處理者等三方,事件源就是圖形界面上的組件,事件就是對(duì)用戶操作的描述,而事件處理者是處理事件的類。因此,對(duì)于AWT中所提供的各個(gè)組件,我們都需要了解該組件經(jīng)常發(fā)生的事件以及處理該事件的相應(yīng)的監(jiān)聽器接口。 54 4 Swing簡(jiǎn)介 55 4.1 簡(jiǎn)介前面我們學(xué)習(xí)了AWT,AWT是Swing的基礎(chǔ)。Swing的產(chǎn)
47、生主要原因就是AWT不能滿足圖形化用戶界面發(fā)展的需要。AWT設(shè)計(jì)的初衷是支持開發(fā)小應(yīng)用程序的簡(jiǎn)單用戶界面。例如AWT缺少剪貼板、打印支持、鍵盤導(dǎo)航等特性,而且原來的AWT甚至不包括彈出式菜單或滾動(dòng)窗格等基本元素。此外AWT還存在著嚴(yán)重的缺陷,人們使AWT適應(yīng)基于繼承的、具有很大伸縮性的事件模型,基于同位體的體系結(jié)構(gòu)也成為其致命的弱點(diǎn)。隨著發(fā)展的需要,Swing出現(xiàn)了,Swing組件幾乎都是輕量組件,與重量組件相比,沒有本地的對(duì)等組件,不像重量組件要在它們自己的本地不透明窗體中繪制,輕量組件在它們的重量組件的窗口中繪制。 56 4.1 簡(jiǎn)介n Swing是由100%純Java實(shí)現(xiàn)的,Swing組
48、件是用Java實(shí)現(xiàn)的輕量級(jí)( light-weight)組件,沒有本地代碼,不依賴操作系統(tǒng)的支持,這是它與AWT組件的最大區(qū)別。由于AWT組件通過與具體平臺(tái)相關(guān)的對(duì)等類(Peer)實(shí)現(xiàn),因此Swing比AWT組件具有更強(qiáng)的實(shí)用性。Swing在不同的平臺(tái)上表現(xiàn)一致,并且有能力提供本地窗口系統(tǒng)不支持的其它特性。 n Swing采用了一種MVC的設(shè)計(jì)范式,即模型-視圖-控制(Model-View-Controller),其中模型用來保存內(nèi)容,視圖用來顯示內(nèi)容,控制器用來控制用戶輸入。 n在AWT組件中,由于控制組件外觀的對(duì)等類與具體平臺(tái)相關(guān),使得AWT組件總是只有與本機(jī)相關(guān)的外觀。Swing使得程序
49、在一個(gè)平臺(tái)上運(yùn)行時(shí)能夠有不同的外觀。用戶可以選擇自己習(xí)慣的外觀。 57 4.2 Swing的類層次結(jié)構(gòu) n在javax.swing包中,定義了兩種類型的組件:頂層容器(JFrame,JApplet,JDialog和JWindow)和輕量級(jí)組件。Swing組件都是AWT的Container類的直接子類和間接子類。n java.awt.Component-java.awt.Container-java.awt.Window-java.awt.Frame-javax.swing.JFrame-javax.Dialog-javax.swing.JDialog-javax.swing.JWindow-j
50、ava.awt.Applet-javax.swing.JApplet -javax.swing.Box-javax.swing.Jcomponet 58 4.2 Swing的類層次結(jié)構(gòu)swing包是Swing提供的最大包,它包含將近100個(gè)類和25個(gè)接口,幾乎所有的Swing組件都在swing包中,只有JtableHeader和JtextComponent是例外,它們分別在swing.table和swing.text中。swing.border包中定義了事件和事件監(jiān)聽器類,與AWT的event包類似。它們都包括事件類和監(jiān)聽器接口。swing.pending包包含了沒有完全實(shí)現(xiàn)的Swing組件。
51、swing.table包中主要包括了表格組建(JTable)的支持類。swing.tree同樣是JTree的支持類。swing.text、swing.text.html、swing.text.html.parser和swing.text.rtf都是用于顯示和編輯文檔的包。 59 4.3 Swing組件的多樣化 n Swing是AWT的擴(kuò)展,它提供了許多新的圖形界面組件。Swing組件以J開頭,除了有與AWT類似的按鈕(JButton)、標(biāo)簽(JLabel)、復(fù)選框(JCheckBox)、菜單(JMenu)等基本組件外,還增加了一個(gè)豐富的高層組件集合,如表格(JTable)、樹(JTree)。
52、60 4.4 MVC(Model-View-Control)體系結(jié)構(gòu)Swing勝過AWT的主要優(yōu)勢(shì)在于MVC體系結(jié)構(gòu)的普遍使用。在一個(gè)MVC用戶界面中,存三個(gè)通訊對(duì)象:模型、視圖和控件。模型是指定的邏輯表示法,視圖是模型的可視化表示法,而控件則指定了如何處理用戶輸入。當(dāng)模型發(fā)生改變時(shí),它會(huì)通知所有依賴它的視圖,視圖使用控件指定其相應(yīng)機(jī)制。 為了簡(jiǎn)化組件的設(shè)計(jì)工作,在Swing組件中視圖和控件兩部分合為一體。每個(gè)組件有一個(gè)相關(guān)的分離模型和它使用的界面(包括視圖和控件)。比如,按鈕JButton有一個(gè)存儲(chǔ)其狀態(tài)的分離模型ButtonModel對(duì)象。組件的模型是自動(dòng)設(shè)置的,例如一般都使用JButto
53、n 而不是使用ButtonModel 對(duì)象。另外,通過Model類的子類或通過實(shí)現(xiàn)適當(dāng)?shù)慕涌?,可以為組件建立自己的模型。把數(shù)據(jù)模型與組件聯(lián)系起來用setModel( )方法。MVC是現(xiàn)有的編程語言中制作圖形用戶界面的一種通用的思想,其思路是把數(shù)據(jù)的內(nèi)容本身和顯示方式分離開,這樣就使得數(shù)據(jù)的顯示更加靈活多樣。比如,某年級(jí) 各個(gè)班級(jí)的學(xué)生人數(shù)是數(shù)據(jù),則顯示方式是多種多樣的,可以采用柱狀圖顯示,也可以采用餅圖顯示,也可以采用直接的數(shù)據(jù)輸出。因此在設(shè)計(jì)的時(shí)候,就考慮把數(shù)據(jù)和顯示方式分開,對(duì)于實(shí)現(xiàn)多種多樣的顯示是非常有幫助的。 61 4.5 可存取性支持 n所有Swing組件都實(shí)現(xiàn)了Accessible
54、接口,提供對(duì)可存取性的支持,使得輔助功能如屏幕閱讀器能夠十分方便的從Swing組件中得到信息。 62 4.6 支持鍵盤操作 n在Swing組件中,使用JComponent類的registerKeyboardAction()方法,能使用戶通過鍵盤操作來替代鼠標(biāo)驅(qū)動(dòng)GUI上Swing組件的相應(yīng)動(dòng)作。有些類還為鍵盤操作提供了更便利的方法。即設(shè)定熱鍵。 63 4.7 設(shè)置邊框 n對(duì)Swing組件可以設(shè)置一個(gè)和多個(gè)邊框。Swing中提供了各式各樣的邊框供用戶選用,也能建立組合邊框或自己設(shè)計(jì)邊框。一種空白邊框可以增大組件,協(xié)助布局管理器對(duì)容器中的組件進(jìn)行合理的布局。 64 4.8 使用圖標(biāo)(Icon) n
55、與AWT的部件不同,許多Swing組件如按鈕、標(biāo)簽,除了使用文字外,還可以使用圖標(biāo)修飾自己。 65 4.9 Swing程序結(jié)構(gòu)簡(jiǎn)介 n Swing的程序設(shè)計(jì)一般可按照下列流程進(jìn)行:1 引入Swing包2 選擇外觀和感覺3 設(shè)置頂層容器4 設(shè)置按鈕和標(biāo)簽5 向容器中添加組件6 在組件周圍添加邊界7 進(jìn)行事件處理 66 5 Swing組件和容器 67 5.1 組件的分類 n Jcomponent是一個(gè)抽象類,用于定義所有子類組件的一般方法,其類層次結(jié)構(gòu)如下所示: java.lang.Object|+-java.awt.Component|+-java.awt.Container|+-javax.s
56、wing.JComponent并不是所有的Swing組件都繼承于JComponent類,JComponent類繼承于Container類,所以凡是此類的組件都可作為容器使用。 68 5.1 組件的分類n組件從功能上分可分為:1) 頂層容器:JFrame,JApplet,JDialog,JWindow共4個(gè)2) 中間容器:JPanel,JScrollPane,JSplitPane,JToolBar3) 特殊容器:在GUI上起特殊作用的中間層,如JInternalFrame,JLayeredPane,JRootPane.4) 基本控件:實(shí)現(xiàn)人際交互的組件,如Jbutton, JComboBox,
57、JList, JMenu, JSlider, JtextField。5) 不可編輯信息的顯示:向用戶顯示不可編輯信息的組件,例如JLabel, JProgressBar, ToolTip。6) 可編輯信息的顯示:向用戶顯示能被編輯的格式化信息的組件,如JColorChooser, JFileChoose, JFileChooser, Jtable, JtextArea。 69 5.1 組件的分類n JComponent類的特殊功能又分為:1) 邊框設(shè)置:使用setBorder()方法可以設(shè)置組件外圍的邊框,使用一個(gè)EmptyBorder對(duì)象能在組件周圍留出空白。 2) 雙緩沖區(qū):使用雙緩沖技術(shù)
58、能改進(jìn)頻繁變化的組件的顯示效果。與AWT組件不同,JComponent組件默認(rèn)雙緩沖區(qū),不必自己重寫代碼。如果想關(guān)閉雙緩沖區(qū),可以在組件上施加setDoubleBuffered(false)方法。3) 提示信息:使用setTooltipText()方法,為組件設(shè)置對(duì)用戶有幫助的提示信息。4) 鍵盤導(dǎo)航:使用registerKeyboardAction( ) 方法,能使用戶用鍵盤代替鼠標(biāo)來驅(qū)動(dòng)組件。JComponent類的子類AbstractButton還提供了便利的方法用setMnemonic( )方法指明一個(gè)字符,通過這個(gè)字符和一個(gè)當(dāng)前L/把其它組件添加到Jpanel中; frame.set
59、ContentPane(contentPane); /把contentPane對(duì)象設(shè)置成為frame的內(nèi)容面板 71 5.3 各種容器面板和組件 72 5.3.1 根面板(JRootPane)n根面板由一個(gè)玻璃面板(glassPane)、一個(gè)內(nèi)容面板(contentPane)和一個(gè)可選擇的菜單條(JMenuBar)組成,而內(nèi)容面板和可選擇的菜單條放在同一分層。玻璃面板是完全透明的,缺省值為不可見,為接收鼠標(biāo)事件和在所有組件上繪圖提供方便。根面板提供的方法:Container getContentPane(); /獲得內(nèi)容面板setContentPane(Container); /設(shè)置內(nèi)容面JM
60、enuBar getMenuBar( ); /活動(dòng)菜單條setMenuBar(JMenuBar); /設(shè)置菜單條JLayeredPane getLayeredPane(); /獲得分層面板setLayeredPane(JLayeredPane); /設(shè)置分層面板Component getGlassPane(); /獲得玻璃面板setGlassPane(Component); /設(shè)置玻璃面板 73 5.3.2 分層面板(JLayeredPane) n Swing提供兩種分層面板:JlayeredPane和JDesktopPane。 JDesktopPane是JLayeredPane的子類,專門為
61、容納內(nèi)部框架(JInternalFrame)而設(shè)置。向一個(gè)分層面板種添加組件,需要說明將其加入哪一層,指明組件在該層中的位置:add(Component c, Integer Layer, int position)。 74 5.3.3 面板(JPanel) n面板(JPanel)是一個(gè)輕量容器組件,用法與Panel相同,用于容納界面元素,以便在布局管理器的設(shè)置下可容納更多的組件,實(shí)現(xiàn)容器的嵌套。Jpanel, JscrollPane, JsplitPane, JinteralFrame都屬于常用的中間容器,是輕量組件。Jpanel的缺省布局管理器是FlowLayout。 75 5.3.4 滾
62、動(dòng)窗口(JScrollPane) n JscrollPane是帶滾動(dòng)條的面板,主要是通過移動(dòng)JViewport(視口)來實(shí)現(xiàn)的。JViewport是一種特殊的對(duì)象,用于查看基層組件,滾動(dòng)條實(shí)際就是沿著組件移動(dòng)視口,同時(shí)描繪出它在下面看到的內(nèi)容。 76 5.3.5 分隔板(JSplitPane) n JSplitPane提供可拆分窗口,支持水平拆分和垂直拆分并帶有滑動(dòng)條。 常用方法有:addImpl(Component comp,Object constraints,int index)/增加指定的組件setTopComponent(Component comp) /設(shè)置頂部的組件setDivi
63、derSize(int newSize) /設(shè)置拆分的大小setUI(SplitPaneUI ui) /設(shè)置外觀和感覺 77 5.3.6 選項(xiàng)板(JTabbedPane) n JTabbedPane提供一組可供用戶選擇的帶有標(biāo)簽或圖標(biāo)的開關(guān)鍵。常用方法:add(String title,Component component) /增加一個(gè)帶特定標(biāo)簽的組件addChangeListener(ChangeListener l) /選項(xiàng)板注冊(cè)一個(gè)變化監(jiān)聽器 78 5.3.7 工具欄(JtoolBar) n JtoolBar是用于顯示常用工具控件的容器。用戶可以拖拽出一個(gè)獨(dú)立的可顯示工具控件的窗口。常
64、用方法有:JToolBar(String name) /構(gòu)造方法getComponentIndex(Component c) /返回一個(gè)組件的序號(hào)getComponentAtIndex(int i) /得到一個(gè)指定序號(hào)的組件 79 5.3.8 內(nèi)部框架(JInternalFrame) n內(nèi)部框架JInternalFrame就如同一個(gè)窗口在另一個(gè)窗口內(nèi)部,其特點(diǎn)如下:1) 必須把內(nèi)部框架添加到一個(gè)容器中(通常為JDesktopPane),否則不顯示;2) 不必調(diào)用show()或setVisible()方法,內(nèi)部框架隨所在的容器一起顯示;3) 必須用setSize()或pack()或setBoun
65、ds方法設(shè)置框架尺寸,否則尺寸為零,框架不能顯示;4) 可以用setLocation()或setBounds( ) 方法設(shè)置內(nèi)部框架在容器中的位置,缺省值為0,0,即容器的左上角;5) 象頂層JFrame一樣,對(duì)內(nèi)部框架添加組件也要加在它的內(nèi)容面板上;6) 在內(nèi)部框架中建立對(duì)話框,不能使用JDialog作為頂層窗口,必須用JOptionPane或JInternalFrame;7) 內(nèi)部框架不能監(jiān)聽窗口事件,可以通過監(jiān)聽與窗口事件類似的內(nèi)部框架(JInternalFrameEvent)處理內(nèi)部框架窗口的操作。 80 5.3.8 內(nèi)部框架(JInternalFrame)JFrame frame=n
66、ew JFrame(InternalFrameDemo); /實(shí)例化窗口JDesktopPane desktop=new JDesktopPane(); /實(shí)例化容器JDesktopPaneMyInternalFrame myframe=new MyInternalFrame(); /實(shí)例化內(nèi)部窗口desktop.add(myframe); /把內(nèi)部窗口添加到容器中myframe.setSelected(true); /內(nèi)部面板是可選擇的frame.setContentPane(desktop); /把desktop設(shè)為frame的內(nèi)容面板 81 5.3.9 按鈕(Jbutton) n按鈕是一個(gè)常用組件,按鈕可以帶標(biāo)簽或圖象。 n常用的構(gòu)造方法有:JButton(Icon icon) /按鈕上顯示圖標(biāo)JButton(String text) /按鈕上顯示字符JButton(String text, Icon icon) /按鈕上既顯示圖標(biāo)又顯示字符 82 n 5.3.10 復(fù)選框(JCheckBox) n 5.3.11 單選框(JRadioButton)n 5.3.12 選擇框(JCo
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020高考化學(xué)熱門專題:原理綜合透題型析課件
- 現(xiàn)代中國(guó)的教育說課稿課件
- 蒸餾和熔點(diǎn)沸點(diǎn)的測(cè)定和溫度計(jì)的校正
- 臨時(shí)起搏器的護(hù)理
- 恒成實(shí)業(yè)網(wǎng)絡(luò)推廣方案
- 勿為小惡優(yōu)秀課件-粵教版
- 人教版初中地理七年級(jí)上冊(cè)人口與人種課件7
- 誡子書課件文檔
- 軟件測(cè)試計(jì)劃書與測(cè)試用例編寫課件
- 人教版五年級(jí)數(shù)學(xué)上冊(cè)課件3小數(shù)除法第2課時(shí)除數(shù)是整數(shù)的小數(shù)除法課件
- 太白酒2002年全國(guó)推廣營(yíng)銷企劃案
- 滬教版小學(xué)語文三年級(jí)上冊(cè)《小狗杜克》課件1
- 我們的情感世界課件7-人教版
- 擔(dān)保產(chǎn)品案例講解及其風(fēng)險(xiǎn)控制設(shè)計(jì)(含法律相關(guān)規(guī)范)
- 【部編版】四年級(jí)語文上冊(cè)《2.走月亮》ppt課件