Java 2實用教程課件(第3版第7章).ppt
《Java 2實用教程課件(第3版第7章).ppt》由會員分享,可在線閱讀,更多相關(guān)《Java 2實用教程課件(第3版第7章).ppt(43頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第7章 AWT組件及事件處理,7.1 Java窗口 7.2 文本框 7.3 內(nèi)部類實例做監(jiān)視器 7.4 按鈕與標簽 7.5 菜單項 7.6 文本區(qū) 7.7 面板 7.8 布局 7.9 畫布,7.10 選擇型組件 7.11 Component類的常用方法 7.12 窗口事件 7.13 鼠標事件 7.14 焦點事件 7.15 鍵盤事件 7.16 使用剪貼板 7.17 打印 7.18 綜合實例,,,圖形用戶界面,通過圖形用戶界面(GUI:Graphics User Interface),用戶和程序之間可以方便地進行交互。Java的抽象窗口工具包(AWT:Abstract Window Toolkit)中包含了許多類來支持GUI設(shè)計。AWT由Java的java.awt包提供,該包中有許多用來設(shè)計GUI的組件類,如:按鈕、菜單、列表、文本框等組件類,同時它還包含窗口、面板等容器類。,,,容器類(Container)和組件類(Component),Java.awt包中一部分類的層次關(guān)系如圖所示,,,7.1 Java窗口,Frame類是Container類的間接子類。當(dāng)需要一個窗口時,可使用Frame或其子類創(chuàng)建一個對象。窗口也是一個容器,可以向窗口添加組件。需要注意的是,窗口默認地被系統(tǒng)添加到顯示器屏幕上,因此,不允許將一個窗口添加到另一個容器中。,,,1. Frame常用方法,1.Frame() 該構(gòu)造方法可以創(chuàng)建一個無標題的窗口,窗口的默認布局為BorderLayout布局。 2.Frame(String s) 該構(gòu)造方法可以創(chuàng)建一個標題為s的窗口,窗口的默認布局為BorderLayout布局。 3.public void setBounds(int a,int b,int width,int height) 窗口調(diào)用該方法可以設(shè)置出現(xiàn)在屏幕上時的初始位置是(a,b),即距屏幕左面a個像素、距屏幕上方b個像素;窗口的寬是width,高是height。 4.public void setSize(int width,int height) 設(shè)置窗口的大小,窗口在屏幕出現(xiàn)是默認位置是(0,0)。 5.public void setVisible(boolean b) 設(shè)置窗口是可見還是不可見,窗口默認是不可見的。 6.public void setResizable(boolean b) 設(shè)置窗口是否可調(diào)整大小,窗口默認是可調(diào)整大小的。,,,2.菜單條、菜單、菜單項,java.awt包中的Menubar類是負責(zé)創(chuàng)建菜單條的,即Menubar的一個實例就是一個菜單條。Frame類有一個將菜單條放置到窗口中的方法:setMenuBar(MenuBar bar); java.awt包中的Menu類是負責(zé)創(chuàng)建菜單的,即Menu的一個實例就是一個菜單 java.awt包的MunuItem類負責(zé)創(chuàng)建菜單項,即MenuItem的一個實例就是一個菜單項,,,7.3 文本框,java.awt包中的類TextField類創(chuàng)建文本框. 用戶可以在文本框輸入單行的文本 .,,,1.TextField類的主要方法,TextField(int x) 如果使用這個構(gòu)造方法創(chuàng)建文本框?qū)ο?,文本框中的可見字符序列的長度為 x個機器字符長。文本框是可編輯的,用戶可以在文本框中輸入若干個字符。 TextField(String s ) 如果使用這個構(gòu)造方法創(chuàng)建文本框?qū)ο?,則文本框的初始字符串為s。文本框是可編輯的,可以在文本框中輸入若干個字符。 public void setText(String s) 文本框?qū)ο笳{(diào)用該方法可以設(shè)置文本框中的文本為參數(shù)s指定的文本,文本框中先前的文本將被清除。 public String getText() 文本框?qū)ο笳{(diào)用該方法可以獲取文本框中的文本。 public void addActionListener(ActionListener l) 文本框?qū)ο笳{(diào)用該方法可以向文本框增加動作監(jiān)視器(將監(jiān)視器注冊到文本框)。,,,2.文本框上的ActionEvent事件,學(xué)習(xí)組件除了了解組件的屬性和功能外,一個更重要的方面是學(xué)習(xí)怎樣處理組件上發(fā)生的界面事件。 在學(xué)習(xí)處理事件時,必須很好地掌握事件源、監(jiān)視器、處理事件的接口這三個概念。 通過處理文本框這個具體的組件上的事件,來掌握處理事件的基本原理。,,,Java的事件處理模式,事件源 能夠產(chǎn)生事件的對象都可以成為事件源,如文本框、按鈕、下拉式列表等。也就是說,事件源必須是一個對象,而且這個對象必須是Java認為能夠發(fā)生事件的對象。 監(jiān)視器 需要一個對象對事件源進行監(jiān)視,以便對發(fā)生的事件作出處理。事件源通過調(diào)用相應(yīng)的方法將某個對象作為自己的監(jiān)視器。例如,對于文本框,這個方法是: addActionListener(監(jiān)視器); 創(chuàng)建該監(jiān)視器對象的類必須聲明實現(xiàn)相應(yīng)的接口 處理事件的接口 在文本框獲得輸入焦點之后,如果用戶按回鍵,Java運行系統(tǒng)就自動用ActionEvent類創(chuàng)建了一個對象,即發(fā)生了ActionEvent事件 .當(dāng)事件源發(fā)生事件時,監(jiān)視器就自動調(diào)用執(zhí)行被類實現(xiàn)的某個接口方法 .,,,處理事件示意圖,,,,7.4按鈕與標簽,標簽的功能是只顯示文本,不能動態(tài)地編輯文本。Lalel類的實例就是一個標簽. Java.awt包中的Button類是專門用來建立按鈕的。即Button類創(chuàng)建的一個對象就是一個按鈕。 按鈕可以發(fā)生ActionEvent事件,當(dāng)按鈕獲得監(jiān)視器之后,用鼠標單擊按鈕,就發(fā)生ActionEven事件.,,,7.5菜單項,單擊某個菜單項可以發(fā)生ActionEvent事件,因此,我們可以通過處理ActionEvent事件實現(xiàn)我們想要進行的操作。 可以使用MenuShotcut類為菜單項設(shè)置快捷鍵,該類的一個構(gòu)造方法是: MenuShotcut (int key); 其中key可以取值:KeyEvent.VK_A~ KeyEvent.VK_Z; 菜單項使用setShortcut(MenuShortcut k)方法來設(shè)置快捷鍵。,,,7.6文本區(qū),java.awt包中的類TextArea類是專門用來建立文本區(qū)的,即TextArea創(chuàng)建的一個對象稱做一個文本區(qū)。用戶可以在文本區(qū)輸入多行的文本。,,,1. TextArea類主要方法,TextArea(int x,int y) 使用這個構(gòu)造方法創(chuàng)建文本區(qū)對象,文本框可見行數(shù)和列數(shù)數(shù)分別為x和y。文本區(qū)有水平和垂直滾動條。 public void setText(String s) 文本區(qū)對象調(diào)用該方法可以將文本區(qū)中的文本設(shè)置為參數(shù)s指定的文本,文本區(qū)中先前的文本將被清除。 public String getText() 文本區(qū)對象調(diào)用該方法可以獲取文本區(qū)中的文本。 public void append(String s) 文本區(qū)對象調(diào)用該方法可以在文本區(qū)中尾加文本 . addTextListener(TextListener) 文本區(qū)對象調(diào)用該方法可以向文本框增加文本監(jiān)視器。,,,2.文本區(qū)上的TextEvent事件,對于文本區(qū)事件源,可以發(fā)生TextEvent事件。當(dāng)文本區(qū)獲得監(jiān)視器之后,在文本區(qū)域中改變文本的內(nèi)容,如鍵入字符、刪除字符時,TextEvent類將自動創(chuàng)建一個事件對象。 發(fā)生TextEvent事件的事件源獲得監(jiān)視器的方法是addTextListener(監(jiān)視器);, 由于文本區(qū)可以發(fā)生TextEvent事件,所以TextArea類提供了addTextListener方法。 處理發(fā)生TextEvent 事件的接口是TextListener,該接口中只有一個的方法: textValueChanged (TextEvent e) 創(chuàng)建文本區(qū)監(jiān)視器的類必須要實現(xiàn)TextListener接口。當(dāng)文本區(qū)發(fā)生TextEvent事件時,監(jiān)視器將自動調(diào)用方法: textValueChanged (TextEvent e) 對發(fā)生的事件作出處理。,,,7.7面板,java.awt包的Panel類是Container(容器)的子類,因此Panel類及其子類的實例也是一個容器,Panel型容器的默認布局是FlowLayout型布局。Panel類創(chuàng)建的對象稱做面板,我們經(jīng)常在一個面板里添加若干個組件后,再把面板放到另一個容器里。 java.awt包中的ScrollPane類也是Container類的子類,因此該類創(chuàng)建的對象也是一個容器,稱為滾動面板。我們可以把一個組件放到一個滾動面板中,然后通過滾動條來觀察這個組件。與Panel創(chuàng)建的容器所不同的是,ScrollPane帶有滾動條,而且只能向滾動面板添加一個組件。,,,7.8布局,當(dāng)把組件添加到容器中時,希望控制組件在容器中的位置,這就需要學(xué)習(xí)布局設(shè)計的知識。我們將分別介紹java.awt包中的FlowLayout、BorderLayout、CardLayout、GridLayout布局類和java.swing.border包中的BoxLayout布局類。 容器可以使用方法: setLayout(布局對象); 來設(shè)置自己的布局。,,,1. FlowLayout布局,FlowLayout類創(chuàng)建的對象稱做FlowLayout型布局。FlowLayout型布局是Panel型容器的默認布局,即Panel及其子類創(chuàng)建的容器對象,如果不專門為其指定布局,則它們的布局就是FlowLayout型布局。 如果一個容器使用這個FlowLayout型布局,組件按照加入的先后順序從左向右排列,一行排滿之后就轉(zhuǎn)到下一行繼續(xù)從左至右排列 .,,,2. BorderLayout布局,BorderLayout 布局是Window型容器的默認布局,例如Frame、Dialog都是Window類的子類,它們的默認布局都是BorderLayout 布局。 如果一個容器使用這種布局,那么容器空間簡單地劃分為東、西、南、北、中五個區(qū)域,中間的區(qū)域最大。,,,3. CardLayout 布局,使用CardLayout 的容器可以容納多個組件,但是實際上同一時刻容器只能從這些組件中選出一個來顯示,就像一疊“撲克牌”每次只能顯示最上面一張一樣,這個被顯示的組件將占據(jù)所有的容器空間,依次排序。,,,4. GridLayout布局,GridLayout的布局策略是把容器劃分成若干行乘若干列的網(wǎng)格區(qū)域,組件就位于這些劃分出來的小格中。GridLayout比較靈活,劃分多少網(wǎng)格由程序自由控制,而且組件定位也比較精確. 由于GridLayout布局中每個網(wǎng)格都是相同大小并且強制組件與網(wǎng)格的大小相同,使得容器中的每個組件也都是相同的大小,顯得很不自然。為了克服這個缺點,你可以使用容器嵌套。,,,5. BoxLayout布局,盒式布局的容器將組件排列在一行或一列,這取決于創(chuàng)建盒式布局對象時,是否指定了是行排列還是列排列。 使用行(列)型盒式布局的容器將組件排列在一行(列),組件按加入的先后順序從左(上)向右(下)排列,容器的兩端是剩余的空間。和FlowLayou布局不同的是,使用行型盒式布局的容器只有一行(列),即使組件再多,也不會延伸到下一行(列),這些組件可能會被縮小大小,緊縮在這一行(列)中。,,,7.9畫布,java.awt包中的類Canvas負責(zé)創(chuàng)建畫布對象。創(chuàng)建畫布對象的常用辦法是用Canvas的子類來創(chuàng)建畫布對象,并在子類中重寫父類的public void paint(Graphics g)方法。該方法是Component類的一個方法,可以在其子類中重寫這個方法,當(dāng)重寫這個方法時,參數(shù)g是自動實例化的,這樣我們就可以在子類中使用 g調(diào)用相應(yīng)方法,比如畫串、畫圖形、圖像等 .,,,7.5選擇型組件,選擇框 選擇框提供兩種狀態(tài),一種是選中,另一種是未選中。java.awt包中的Checkbox用來建立選擇框,即Checkbox創(chuàng)建的一個對象就是一個選擇框。 選擇框可以發(fā)生ItemEvent事件,發(fā)生ItemEvent事件的事件源獲得監(jiān)視器的方法是:addItemListener(監(jiān)視器) . 創(chuàng)建監(jiān)視器的類必須實現(xiàn)ItemListener接口,該接口中只有一個的方法。當(dāng)在選擇框發(fā)生ItemEvent事件時,監(jiān)視器將自動調(diào)用接口方法: temStateChanged(ItemEvent e) 對發(fā)生的事件作出處理。,,,下拉列表 Choice創(chuàng)建的一個對象稱作一個下拉列表組件,它是用戶十分熟悉的一個組件。用戶可以在下拉列表看到第一個選項和它旁邊的箭頭按鈕,當(dāng)用戶單擊箭頭按鈕時,選項列表打開。 下拉式列表可以發(fā)生ItemEvent事件。當(dāng)下拉式列表獲得監(jiān)視器之后,用戶在下拉列表選項列表中選中某個選項時就發(fā)生ItemEvent事件.,,,滾動列表 java.awt包中的類List類建立滾動列表 . 滾動列表和下拉列表的另一不同之處是,滾動列表除了可以發(fā)生ItemEvent事件外,還可以發(fā)生ActionEvent事件。當(dāng)用鼠標單擊滾動列表的某個選項后,發(fā)生ItemEvent事件;當(dāng)用鼠標雙擊某個選項后,發(fā)生ActionEvent事件。,,,7.11 Component類的常用方法,Component類是所有組件的父類,這一節(jié)介紹Component類的常用方法,,,1.組件的顏色,public void setBackground(Color c) 設(shè)置組件的背景色。 public void setForeground(Color c) 設(shè)置組件的前景色。 public Color getBackground() 獲取組件的背景色。 public Color getForeground() 獲取組件的前景色。,,,2.組件的字體,public void setFont(Font f) 組件調(diào)用該方法設(shè)置組件上的字體。例如,文本組件調(diào)用該方法可以設(shè)置文本組件中的字體。 public Font getFont() 組件調(diào)用該方法獲取組件上的字體。,,,3.組件的大小與位置,public void setSize(int width,int height) 組件調(diào)用該方法設(shè)置組件的大小,參數(shù)width指定組件的寬度,height指定組件的高度。 public void setLocation(int x,int y) 組件調(diào)用該方法設(shè)置組件在容器中的位置,包含該組件的容器都有默認的坐標系,容器的坐標系的左上角的坐標是(0,0),參數(shù)x,y指定該組件的左上角在容器的坐標系中的坐標,即組件距容器的左邊界 x個像素,距容器的上邊界 y 個像素。 public Dimension getSize() 組件調(diào)用該方法返回一個Dimension對象的引用,該對像實體中含有名字是width 和height的成員變量,方法返回的Dimension 對象的width的值就是組件的寬度、height的值就是當(dāng)前組件的高度。 public Point getLocation() 組件調(diào)用該方法返回一個Point對象的引用,該對像實體中含有名字是x 和y的成員變量,方法返回的Point對象的x,y的值就是組件的左上角在容器的坐標系中的x坐標和y坐標。 public void setBounds(int x,int y,int width,int height) 組件調(diào)用該方法設(shè)置組件在容器中的位置和組件的大小。該方法相當(dāng)于setSize方法和setLocation方法的組合。 public Rectangle getBounds() 組件調(diào)用該方法返回一個Rectangle對象的引用,該對象實體中含有名字是x、y、width 和height的成員變量,方法返回的Rectangle對象的x,y的值就是組件的左上角在容器的坐標系中的x坐標和y坐標,width和height的值就是當(dāng)前組件的寬度和高度。,,,4.組件的激活與可見性,public void setEnabled(boolean b) 組件調(diào)用該方法可以設(shè)置組件是否可被激活,當(dāng)參數(shù)b取值true時,組件可以被激活,當(dāng)參數(shù)b取值false 時,組件不可激活。默認情況下,組件是可以被激活的。 public void setVisible(boolean) 設(shè)置組件在該容器中的可見性,當(dāng)參數(shù)b取值true時,組件在容器中可見,當(dāng)參數(shù)b取值false 時,組件在容器中不可見。除了Window型組件外,其它類型組件默認是可見的。,,,5.組件上的光標,public void setCursor(Cursor c) 設(shè)置鼠標指向組件時的光標形狀。 可以使用 Cursor類的類方法直接獲得一個光標對象,例如: Cursor c=Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);,,,6.paint方法與repaint方法,調(diào)用repaint()方法時,repaint()方法會再去調(diào)用update(Graphics g)方法。update(Graphics g)方法也是Component類中的一個方法,這個方法的功能是:清除paint()方法以前所畫的內(nèi)容,然后再調(diào)用paint方法。因此我們可以在子類中重寫update方法(即隱藏父類的方法),根據(jù)需要來清除哪些部分或保留哪些部分。,,,7.12窗口事件,Frame是Window的子類,凡是 Window子類創(chuàng)建的對象都可以發(fā)生WindowEvent類型事件,即窗口事件。 當(dāng)一個Frame窗口被激活、撤消激活、打開、關(guān)閉、圖標化或撤消圖標化時,就引發(fā)了窗口事件,即WindowEvent創(chuàng)建一個窗口事件對象。WindowEvent創(chuàng)建的事件對象調(diào)用getWindow()方法可以獲取發(fā)生窗口事件的窗口。窗口使用addWindowlistener方法獲得監(jiān)視器,創(chuàng)建監(jiān)視器對象的類必須實現(xiàn)WindowListener接口,該接口中有7個不同的方法 .,,,1. WindowListener接口中的方法,public void windowActivated(WindowEvent e) 當(dāng)窗口從非激活狀態(tài)到激活時,窗口的監(jiān)視器調(diào)用該方法。 public void windowDeactivated(WindowEvent e) 當(dāng)窗口激活狀態(tài)到非激活狀態(tài)時,窗口的監(jiān)視器調(diào)用該方法。 public void windowClosing(WindowEvent e) 當(dāng)窗口正在被關(guān)閉時,窗口的監(jiān)視器調(diào)用該方法。 public void windowClosed(WindowEvent e) 當(dāng)窗口關(guān)閉后,窗口的監(jiān)視器調(diào)用該方法。 public void windowIconified(WindowEvent e) 當(dāng)窗口圖標化時,窗口的監(jiān)視器調(diào)用該方法。 public void windowDeiconified(WindowEvent e) 當(dāng)窗口撤消圖標化時,窗口的監(jiān)視器調(diào)用該方法。 public void windowOpened(WindowEvent e) 當(dāng)窗口打開時,窗口的監(jiān)視器調(diào)用該方法。,,,2. WindowAdapter適配器,適配器可以代替接口來處理事件,當(dāng)Java提供處理事件的接口中多于一個方法時,Java相應(yīng)地就提供一個適配器類,比如WindowAdapter類。適配器已經(jīng)實現(xiàn)了相應(yīng)的接口,例如WindowAdapter類實現(xiàn)了WindowListener接口。因此,可以使用WindowAdapte的子類創(chuàng)建的對象做監(jiān)視器,在子類中重寫所需要的接口方法即可,,,7.13鼠標事件,任何組件上都可以發(fā)生鼠標事件,如:鼠標進入組件、退出組件、在組件上方單擊鼠標、拖動鼠標等都觸發(fā)組件發(fā)生鼠標事件,也就是說,組件可以成為發(fā)生鼠標事件的事件源。,,,1.MouseListener接口,使用MouseListener接口可以處理5種操作觸發(fā)的鼠標事件: (1)在事件源上按下鼠標鍵。 (2)在事件源上釋放鼠標鍵。 (3)在事件源上擊鼠標鍵。 (4)鼠標進入事件源。 (5)鼠標退出事件源。 鼠標事件的類型是MouseEvent,即當(dāng)發(fā)生鼠標事件時,MouseEvent類自動創(chuàng)建一個事件對象。,,,MouseListener接口中的方法,(1)mousePressed(MouseEvent) 負責(zé)處理在組件上按下鼠標觸發(fā)的鼠標事件,當(dāng)在組件上按下鼠標時,監(jiān)視器將自動調(diào)用接口中的這個方法對事件作出處理。 (2)mouseReleased(MouseEvent) 負責(zé)處理在組件上釋放鼠標觸發(fā)的鼠標事件,當(dāng)在組件上釋放鼠標時,監(jiān)視器將自動調(diào)用接口中的這個方法對事件作出處理。 (3)mouseEntered(MouseEvent) 負責(zé)處理鼠進入組件觸發(fā)的鼠標事件,當(dāng)鼠標進入組件上方時,監(jiān)視器將自動調(diào)用接口中的這個方法對事件作出處理。 (4)mouseExited(MouseEvent) 負責(zé)處理鼠標離開組件觸發(fā)的鼠標事件,當(dāng)鼠標離開組件時,監(jiān)視器自動調(diào)用接口中的這個方法對事件作出處理。 (5)mouseClicked(MouseEvent) 負責(zé)處理在組件上單擊或連擊鼠標觸發(fā)的鼠標事件,當(dāng)單擊或連擊鼠標時,監(jiān)視器自動調(diào)用接口中的這個方法對事件作出處理。,,,2.MouseMotionListener接口,使用MouseMotionListener接口可以處理以下兩種操作觸發(fā)的鼠標事件: (1)在事件源上拖動鼠標。 (2)在事件源上移動鼠標。 MouseMotionListener接口中有如下方法: (1)mouseDragged(MouseEvent) 負責(zé)處理在組件上拖動鼠標觸發(fā)的鼠標事件,當(dāng)在組件上拖動鼠標時,監(jiān)視器調(diào)用接口中的這個方法對事件作出處理。 (2)mouseMoved(MouseEvent) 負責(zé)處理在組件上運動鼠標觸發(fā)的鼠標事件,當(dāng)在組件上運動鼠標時,監(jiān)視器調(diào)用接口中的這個方法對事件作出處理,,,7.14 焦點事件,組件可以觸發(fā)焦點事件。組件可以使用 public void addFocusListener(FocusListener listener) 增加焦點事件監(jiān)視器。 當(dāng)組件獲得焦點監(jiān)視器后,如果組件從無輸入焦點變成有輸入焦點或從有輸入焦點變成無輸入焦點都會觸發(fā)FocusEvent事件。創(chuàng)建監(jiān)視器的類必須要實現(xiàn)FocusListener 接口,該接口有兩個方法: public void focusGained(FocusEvent e) public void focusLost(FocusEvent e) 當(dāng)組件從無輸入焦點變成有輸入焦點觸發(fā)FocusEvent事件時,監(jiān)視器調(diào)用類實現(xiàn)的接口方法:focusGained(FocusEvent e);當(dāng)組件從有輸入焦點變成無輸入焦點觸發(fā)FocusEvent事件時,監(jiān)視器調(diào)用類實現(xiàn)的接口方法:focusLost(FocusEvent e)。,,,7.15 鍵盤事件,當(dāng)按下、釋放或敲擊鍵盤上一個鍵時就發(fā)生了鍵盤事件,在Java1.2事件模式中,必須要有發(fā)生事件的事件源。當(dāng)一個組件處于激活狀態(tài)時,敲擊鍵盤上一個鍵就導(dǎo)致這個組件上發(fā)生了鍵盤事件。 事件源使用addKeyListener方法獲得監(jiān)視器。 使用KeyListener接口處理鍵盤事件 .接口KeyListener中有3個方法: public void keyPressed(KeyEvent e), public void keyTyped(KeyEvent e), public void KeyReleased(KeyEvent e)。,,,- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- Java 2實用教程課件第3版第7章 實用教程 課件
鏈接地址:http://zhongcaozhi.com.cn/p-2852420.html