JavaGUI應(yīng)用程序設(shè)計(jì)課件_第1頁
JavaGUI應(yīng)用程序設(shè)計(jì)課件_第2頁
JavaGUI應(yīng)用程序設(shè)計(jì)課件_第3頁
JavaGUI應(yīng)用程序設(shè)計(jì)課件_第4頁
JavaGUI應(yīng)用程序設(shè)計(jì)課件_第5頁
已閱讀5頁,還剩59頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

JavaGUI應(yīng)用程式設(shè)計(jì)

7.1抽象窗口工具集(AWT)AWT--AbstractWindowToolkitGUI--GraphicalUserInterfaceAWT中定義了多種類和介面,用於在JavaApplication/Applet中進(jìn)行GUI設(shè)計(jì)java程式要顯示的GUI組件必須是抽象類Component或MenuComponent的子類AWT組件相關(guān)類的層次關(guān)係

圖7-1JavaAWT組件類的層次關(guān)係

設(shè)計(jì)和實(shí)現(xiàn)用戶圖形介面

主要包括以下三個(gè)方面:

l設(shè)計(jì)組件(Component):包括設(shè)計(jì)Java.awt包中提供的組件和用戶自定義的組件;l

指定佈局(Layout);根據(jù)設(shè)計(jì)需要排列容器內(nèi)各組件的位置;l

設(shè)計(jì)回應(yīng)事件(Event)。java.awt包java.awt包

提供了基本的java程式GUI設(shè)計(jì)工具。Component/MenuComponentContainerLayoutManager7.1.1容器(Container)容器(Container)實(shí)際上是Component的子類,因此容器類對象本身也是一個(gè)組件,具有組件的所有性質(zhì),另外還具有容納其他組件和容器的功能。容器類對象可使用方法add()添加組件兩種主要的容器類型Window:可自由停泊的頂級窗口Panel:可作為容器容納其他組件,但不能獨(dú)立存在,必須被添加到其他容器中(如Window或Applet)Java中GUI容器類層次

Frame類Frame類是抽象類Window的子類Frame對象顯示效果是一個(gè)“窗口”,帶有標(biāo)題和尺寸重置角標(biāo)默認(rèn)初始化為不可見的,可使用setVisible(true)方法使之變?yōu)榭梢娔J(rèn)的佈局管理器是BorderLayout可使用setLayout()方法改變其默認(rèn)佈局管理器Frame類繼承層次java.lang.Object|+----java.awt.Component|+----java.awt.Container|+----java.awt.Window| +----java.awt.FrameFrame類

Frame應(yīng)用舉例

importjava.awt.*;publicclassTestFrame{ publicstaticvoidmain(Stringargs[]){ Framef=newFrame("MyFrameTest"); f.setSize(170,100); f.setBackground(Color.blue); f.setVisible(true); }}Panel類提供容納組件的空間可以採用和所在容器不同的佈局管理器

Panel類的繼承層次java.lang.Object|+----java.awt.Component|+----java.awt.Container| +----java.awt.Panel

Panel

應(yīng)用舉例importjava.awt.*;publicclassTestFrameWithPanel{publicstaticvoidmain(Stringargs[]){ Framef=newFrame("My

FrameWithPanel

Test");Panelpan=newPanel();f.setSize(180,100);f.setBackground(Color.blue);f.setLayout(null);//取消佈局管理器

pan.setSize(100,60);pan.setBackground(Color.green);f.add(pan);f.setVisible(true);}}7.1.2佈局管理器為了使我們生成的圖形用戶介面具有良好的平臺(tái)無關(guān)性,Java語言中,提供了佈局管理器這個(gè)工具來管理組件在容器中的佈局,而不使用直接設(shè)置組件位置和大小的方式。每個(gè)容器都有一個(gè)佈局管理器,當(dāng)容器需要對某個(gè)組件進(jìn)行定位或判斷其大小尺寸時(shí),就會(huì)調(diào)用其對應(yīng)的佈局管理器。容器佈局(ContainerLayouts)

FlowLayoutBorderLayoutGridLayoutCardLayoutGridBagLayout默認(rèn)佈局管理器ComponentContainerWindowPanelFrameDialogAppletBorderLayoutFlowLayoutFlowLayout佈局管理器FlowLayout是Panel類的默認(rèn)佈局管理器FlowLayout佈局對組件逐行定位,行內(nèi)從左到右,一行排滿後換行默認(rèn)對齊方式為居中對齊不改變組件的大小,按組件原有尺寸顯示組件可在構(gòu)造方法中設(shè)置不同的組件間距、行距及對齊方式FlowLayout舉例importjava.awt.*;publicclassTestFlowLayout{publicstaticvoidmain(Stringargs[]){ Framef=newFrame("FlowLayout");Buttonbutton1=newButton("Ok");Buttonbutton2=newButton("Open");Buttonbutton3=newButton("Close");f.setLayout(newFlowLayout());f.add(button1);f.add(button2);f.add(button3);f.setSize(100,100);f.setVisible(true);}}FlowLayout的構(gòu)造方法newFlowLayout(FlowLayout.RIGHT,20,40);

右對齊,組件之間水準(zhǔn)間距20個(gè)像素,豎直間距40個(gè)像素;newFlowLayout(FlowLayout.LEFT);

左對齊,水準(zhǔn)和豎直間距為缺省值:5;newFlowLayout();

使用缺省的居中對齊方式,水準(zhǔn)和豎直間距為缺省值:5;BorderLayout佈局管理器BorderLayout是Frame類的默認(rèn)佈局管理器BorderLayout將整個(gè)容器的佈局劃分成東、西、南、北、中五個(gè)區(qū)域,組件只能被添加到指定的區(qū)域如不指定組件的加入部位,則默認(rèn)加入到Center區(qū)域每個(gè)區(qū)域只能加入一個(gè)組件,如加入多個(gè),則先前加入的組件會(huì)被遺棄BorderLayout佈局管理器BorderLayout型佈局容器尺寸縮放原則北、南兩個(gè)區(qū)域只能在水準(zhǔn)方向縮放(寬度可調(diào)整)東、西兩個(gè)區(qū)域只能在垂直方向縮放(高度可調(diào)整)中部可在兩個(gè)方向上縮放北南西東中部BorderLayout舉例importjava.awt.*;publicclassTestBorderLayout{ publicstaticvoidmain(Stringargs[]){ Framef; f=newFrame("BorderLayout");

Buttonbn=newButton("BN");

Buttonbs=newButton("BS");

Buttonbw=newButton("BW"); Buttonbe=newButton("BE");

Buttonbc=newButton("BC"); f.add(bn,"North"); f.add(bs,"South"); f.add(bw,"West"); f.add(be,"East"); f.add(bc,"Center"); f.setSize(200,200); f.setVisible(true); }}GridLayout

佈局管理器GridLayout型佈局管理器將佈局劃分成規(guī)則的矩形網(wǎng)格,每個(gè)單元格區(qū)域大小相等.組件被添加到每個(gè)單元格中,先從左到右添滿一行後換行,再從上到下.在GridLayout構(gòu)造方法中指定分割的行數(shù)和列數(shù).

newGridLayout(3,4);GridLayout舉例importjava.awt.*;publicclassTestGridLayout{publicstaticvoidmain(Stringargs[]){Framef=newFrame("GridLayoutExample");Buttonb1=newButton("b1");Buttonb2=newButton("b2");Buttonb3=newButton("b3");Buttonb4=newButton("b4");Buttonb5=newButton("b5");Buttonb6=newButton("b6");f.setLayout(newGridLayout(3,2));f.add(b1);f.add(b2);f.add(b3);f.add(b4);f.add(b5);f.add(b6);f.pack();f.setVisible(true);}}CardLayout

佈局管理器CardLayout佈局管理器能夠幫助用戶處理兩個(gè)以至更多的成員共用同一顯示空間,就好象一疊卡片摞在一起。注意:在一張卡片中只能顯示一個(gè)組件,因此可以使用容器嵌套方法顯示多個(gè)組件。

佈局管理器總結(jié)(1)FrameFrame是一個(gè)頂級窗口。Frame的缺省佈局管理器為BorderLayout。PanelPanel無法單獨(dú)顯示,必須添加到某個(gè)容器中。Panel的缺省佈局管理器為FlowLayout。當(dāng)把Panel作為一個(gè)組件添加到某個(gè)容器中後,該P(yáng)anel仍然可以有自己的佈局管理器。因此,可以利用Panel使得BorderLayout中某個(gè)區(qū)域顯示多個(gè)組件。佈局管理器總結(jié)(2)在程式中安排組件的位置和大小時(shí),應(yīng)注意:容器中的佈局管理器負(fù)責(zé)各個(gè)組件的大小和位置,因此用戶無法在這種情況下設(shè)置組件的這些屬性。如果試圖使用Java語言提供的setLocation(),setSize(),setBounds()等方法,則都會(huì)被佈局管理器覆蓋。如果用戶確實(shí)需要親自設(shè)置組件大小或位置,則應(yīng)取消該容器的佈局管理器,方法為:

setLayout(null);7.1.3標(biāo)籤和文本編輯區(qū)

Java的圖形用戶介面的最基本組成部分是組件,組件是一個(gè)可以以圖形化的方式顯示在螢?zāi)簧蟻K能與用戶進(jìn)行交互的對象。組件不能獨(dú)立地顯示出來,必須將組件放在一定的容器中才可以顯示出來。組件是圖形用戶介面標(biāo)準(zhǔn)化的結(jié)果,標(biāo)籤和文本編輯區(qū)就是常用的控制組件。

7.1.3標(biāo)籤和文本編輯區(qū)標(biāo)籤(Label)是用於顯示一行文本,這行文本的內(nèi)容只能在程式中設(shè)置或修改,用戶使用過程中無法修改,Label類是Java.awt包中專門用來建立標(biāo)籤的;

Java中用於處理文本的基本組件有兩種:單行文本框TextField和多行文本區(qū)域TextArea。

組件定位Java組件在容器中的位置和尺寸由佈局管理器決定如要人工控制組件在容器中的大小位置,可取消佈局管理器,然後使用Component類的下述成員方法:setLocation()setSize()setBounds()文本編輯區(qū)應(yīng)用舉例

importjava.applet.*;importjava.awt.*;publicclassTestTextFieldextendsApplet{TextFieldtext1,text2,text3,text4,text5;publicvoidinit(){text1=newTextField("請輸入用戶名:",10);text1.setEditable(false);text2=newTextField(20);text3=newTextField("請輸入密碼:",10);text3.setEditable(false);text4=newTextField(20);text4.setEchoChar('*');text5=newTextField("登錄介面",20);

add(text1);add(text2);add(text3);add(text4);add(text5);}}AWT

繪圖可以在任何Java組件上繪圖(通常Canvas和Panel組件更適合用於繪圖)每個(gè)Java組件都有一個(gè)publicvoidpaint(Graphicsg)方法專門用於繪圖目的,每次重畫該組件時(shí)都自動(dòng)調(diào)用paint方法。每個(gè)Java組件都有一個(gè)Graphics類型的屬性,該屬性(對象)真正完成在相應(yīng)組件上的繪圖功能。Graphics類中實(shí)現(xiàn)了許多繪圖方法: --繪製邊框(非填充圖形) --填充特定區(qū)域 --繪製其他形狀圖形AWT

繪圖舉例importjava.awt.*;publicclassAWTDrawing{privateFramef=newFrame("HelloOutThere!");privatePanelp=newPanel(); publicvoidlaunchFrame(){ f.add(p); f.setSize(170,170); f.setBackground(Color.blue); f.setVisible(true); p.setForeground(Color.red);

Graphicsg=p.getGraphics(); g.drawArc(30,40,50,60,70,80); g.fillArc(30,40,50,60,70,80); } publicstaticvoidmain(Stringargs[]){ AWTDrawingguiWindow=newAWTDrawing(); guiWindow.launchFrame();}}AWT

繪圖舉例importjava.awt.*;classSubPanelextendsPanel{ publicvoidpaint(Graphicsg){ g.drawString("thisisadrawingtest!",20,20); g.drawLine(30,60,100,120); g.draw3DRect(60,50,70,30,false); } } publicclassAWTDrawing2{privateFramef=newFrame("HelloOutThere!");privateSubPanelp=newSubPanel();publicvoidlaunchFrame(){ f.add(p); f.setSize(170,170); f.setBackground(newColor(89,145,145)); f.setVisible(true);}publicstaticvoidmain(Stringargs[]){ AWTDrawing2guiWindow=newAWTDrawing2(); guiWindow.launchFrame();}}7.1.4事件處理事件(Event)–一個(gè)對象,它描述了發(fā)生什麼事情事件源(Eventsource)–產(chǎn)生事件的組件監(jiān)聽器介面(事件處理方法)–能夠接收、解析和處理事件類對象、實(shí)現(xiàn)和用戶交互的方法用戶滑鼠點(diǎn)擊actionPerformed(ActionEvente){……}①②③ActionEvent事件處理模型(DelegationModel)一個(gè)事件可以被發(fā)送到多個(gè)不同的處理方法.如果關(guān)注某個(gè)組件產(chǎn)生的事件,則可以在該組件上註冊適當(dāng)?shù)氖录幚矸椒ǎ瑢?shí)際上註冊的事件處理者方法所屬類型的一個(gè)對象----事件監(jiān)聽器事件處理模型JavaGUI設(shè)計(jì)中,通過註冊監(jiān)聽器的方式對所關(guān)注的事件源進(jìn)行監(jiān)控。註冊監(jiān)聽器時(shí)應(yīng)指明該監(jiān)聽器監(jiān)控(感興趣)的事件種類。當(dāng)事件源發(fā)生了某種類型的事件時(shí),只觸發(fā)事先已就該種事件類型註冊過的監(jiān)聽器。Java事件分類JavaGUI事件及相應(yīng)監(jiān)聽器介面(1)事件類型相應(yīng)監(jiān)聽器介面監(jiān)聽器介面中的方法ActionActionListeneractionPerformed(ActionEvent)ItemItemListeneritemStateChanged(ItemEvent)MouseMouseListenermousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mouseClicked(MouseEvent)MouseMotionMouseMotionListenermouseDragged(MouseEvent)mouseMoved(MouseEvent)KeyKeyListenerkeyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)FocusFocusListenerfocusGained(FocusEvent)focusLost(FocusEvent)JavaGUI事件及相應(yīng)監(jiān)聽器介面(2)事件類型相應(yīng)監(jiān)聽器介面監(jiān)聽器介面中的方法AdjustmentAdjustmentListeneradjustmentValueChanged(AdjustmentEvent)ComponentComponentListenercomponentMoved(ComponentEvent)componentHidden(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)WindowWindowListenerwindowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)windowDeactivated(WindowEvent)ContainerContainerListenercomponentAdded(ContainerEvent)componentRemoved(ContainerEvent)TextTextListenertextValueChanged(TextEvent)多重監(jiān)聽器一般情況下,事件源可以產(chǎn)生多種不同類型的事件,因而可以註冊(觸發(fā))多種不同類型的監(jiān)聽器。一個(gè)事件源組件上可以註冊多個(gè)監(jiān)聽器,針對同一個(gè)事件源的同一種事件也可以註冊多個(gè)監(jiān)聽器,一個(gè)監(jiān)聽器可以被註冊到多個(gè)不同的事件源上。Java事件處理舉例多重監(jiān)聽器應(yīng)用案例見例7-10,p1807.2ATW組件庫

7.2.1Component類:抽象類Component是所有JavaGUI組件的共同父類。Component類規(guī)定了所有GUI組件的基本特性,該類中定義的方法實(shí)現(xiàn)了作為一個(gè)GUI部件所應(yīng)具備的基本功能。

Component類(及其子類)中常用的屬性和對應(yīng)的操作屬性的方法見下頁表格

Component及其子類常用屬性和方法屬性名稱

設(shè)置屬性的方法

獲取屬性的方法背景顏色voidsetBackground(Color)ColorgetBackground()邊界voidsetBounds(Rectangle)voidsetBounds(int,int,int,int)RectanglegetBounds()游標(biāo)voidsetCursor(Cursor)CursorgetCursor()拖放目標(biāo)voidsetDropTarget(DropTarget)DropTargetgetDropTarget()使能voidsetEnabled(boolean)booleanisEnabled()字體voidsetFont(Font)FontgetFont()前景色voidsetForeground(Color)ColorgetForeground()地區(qū)voidsetLocale(Locale)LocalegetLocale()位置voidsetLocation(Point)voidsetLocation(int,int)PontgetLocation()PointgetLocationOnScreen()部件名稱voidsetName(String)StringgetName()尺寸voidsetSize(Dimension)DimensiongetSize()可見性voidsetVisible(boolean)booleangetVisible()常用AWT組件組件類型說明Button可接收點(diǎn)擊操作的矩形GUI組件Canvas用於繪圖的面板Checkbox複選框組件CheckboxMenuItem複選框菜單項(xiàng)組件Choice下拉式列表框,內(nèi)容不可改變Component組件類Container容器類Dialog對話框組件,頂級窗口、帶標(biāo)題欄Frame基本的JavaGUI窗口組件Label標(biāo)籤類List包含內(nèi)容可變的條目的列表框組件Menu菜單組件MenuItem菜單項(xiàng)(二級菜單)組件Panel基本容器類,不能單獨(dú)停泊Scrollbar滾動(dòng)條組件ScrollPane帶水準(zhǔn)及垂直滾動(dòng)條的容器組件TextArea多行文本域TextField單行文本框Window抽象的GUI窗口類,無佈局管理器7.2.2複選框和單選框複選框(Checkbox)用於設(shè)置多重選擇,單選框用於設(shè)置單項(xiàng)選擇。

Checkboxchk=newCheckbox(“one”,null,true);//標(biāo)籤,組名,狀態(tài),複選框?qū)⒀}選框用CheckboxGroup進(jìn)行分組即變?yōu)閱芜x框。CheckboxGroupchkg=newCheckboxGroup();Checkboxchk=newCheckbox(“one”,chkg,true);應(yīng)用案例見例7-11,例7-12,例7-137.2.3下拉列表框和列表框Choice(下拉式菜單)每次只能選擇一項(xiàng)Choicech=newChoice();

ch.add(“Green”);

ch.add(“Red”);下拉列表框(Choice)事件源產(chǎn)生的事件是ItemEvent類型.處理該事件的介面是ItemListener,介面中的方法是itemStateChanged(ItemEvente)。

List(列表)支持單選和多選Listl=newList(4,false);//行數(shù),是否多選列表框List類的事件比下拉列表框Choice要複雜,雙擊列表框List上的選項(xiàng)引發(fā)選項(xiàng)事件ItemEvent和動(dòng)作事件ActionEvent,下拉列表框Choice僅引發(fā)ItemEvent類事件。應(yīng)用案例見例7-11,例7-12,例7-137.2.4按鈕(Button)Buttonb=newButton(“Quit”)add(b);注:1:當(dāng)按鈕對象被點(diǎn)擊後,將會(huì)發(fā)生ActionEvent事件2:getActionCommand()獲得標(biāo)識(shí)名3:setActionCommand()設(shè)置標(biāo)識(shí)名應(yīng)用案例見例7-11,例7-12,例7-137.2.5窗口和菜單

窗口就是由java.awt包中的Frame類或子類所創(chuàng)建的對象;窗口默認(rèn)佈局是BorderLayout;Frame類是Window類的子類,其常用的方法簡單,在使用時(shí)只需要如何創(chuàng)建、顯示和關(guān)閉就可以了。

如何創(chuàng)建菜單首先創(chuàng)建一個(gè)MenuBar對象,並將其置於一個(gè)可容納菜單的容器(如Frame對象)中。創(chuàng)建一個(gè)或多個(gè)Menu對象,並將它們添加到先前創(chuàng)建的MenuBar對象中。創(chuàng)建一個(gè)或多個(gè)MenuItem對象,再將其加入到各Menu對象中創(chuàng)建MenuBar例7-17:創(chuàng)建

MenuBar

importjava.awt.*;publicclassTestMenuBar{publicstaticvoidmain(String[]args){ Framef=newFrame("MenuBar"); MenuBarmb=newMenuBar(); f.setMenuBar(mb); f.setSize(200,150); f.setVisible(true);}}創(chuàng)建Menuimportjava.awt.*;publicclassTestMenu{publicstaticvoidmain(String[]args){ Framef=newFrame("Menu"); MenuBarmb=newMenuBar(); f.setMenuBar(mb); Menum1=newMenu("File"); Menum2=newMenu("Edit"); Menum3=newMenu("Help");

mb.add(m1); mb.add(m2); mb.setHelpMenu(m3); f.setSize(150,120); f.setVisible(true);}}7.2.6對話框?qū)υ捒蚴茿WT中常用的容器,它使用Dialog類,依賴與其它的窗口運(yùn)行。它提供了一個(gè)有用的FileDialog子類,能產(chǎn)生一個(gè)檔對話框幫助用戶打開和保存檔.對話框必須依賴與其它窗口而存在,當(dāng)它所依賴的窗口消失時(shí),對話框也將隨之關(guān)閉。當(dāng)它依賴的窗口最小化時(shí),對話框也從螢?zāi)簧舷?,?dāng)窗口恢復(fù)到正常狀態(tài)時(shí),對話框也重新顯示出來。對話框可以分為無模式對話框和有模式對話框兩種。應(yīng)用案例見例7-217.3Swing圖形用戶介面

Swing組件從功能上可以劃分為以下幾類:頂層容器:JFrame、JApplet、JWindow和JDialog。普通容器:JPanel,JScrollPane,JSplitPane和JTabbedPan,也叫中間層容器,在各種情況下使用。特殊容器:JInternalFrame,JLayerPane,JRootPane和JToolBar,能夠起到特殊作用的容器?;窘M件:如JButton,JComboxBox,JList,JMenu,JSlider和JTextField,是應(yīng)用較多的普通組件。7.3.1Swing中的頂層容器

JFrame類;

JFrame類是java.awt包中Frame類的子類,它繼承了Frame類的很多方法,同時(shí)JFrame類還有很多特性.

JApplet類;JApplet類是java.awt包中Applet類的子類,它繼承了Frame類的很多方法,同時(shí)JApplet類還有很多特性.

JDialog類.

JDialog是java.awt包中Dialog類的子類,必須依賴於一個(gè)JFrame對象.應(yīng)用案例見例7-23,例7-24,例7-257.3.2Swing中的中間層容器

JPanel面板;(JPanel容器的默認(rèn)佈局是FlowLayout,JPanel類有兩個(gè)構(gòu)造方法為JPanel()和JPanel(佈局對象)。JScrollPanel面板;(

JScrollPanel類提供了佈局管理器JScrollPanelLayout用來設(shè)定佈局,有兩個(gè)構(gòu)造方法為JScrollPanel()和JScrollPanel(Componentc)。JSplitPane面板

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論