java课设——用菜单按钮控制绘图

合集下载

Java的Graphics类进行绘图的方法详解

Java的Graphics类进行绘图的方法详解

Java的Graphics类进⾏绘图的⽅法详解Graphics类提供基本绘图⽅法,Graphics2D类提供更强⼤的绘图能⼒。

Graphics类提供基本的⼏何图形绘制⽅法,主要有:画线段、画矩形、画圆、画带颜⾊的图形、画椭圆、画圆弧、画多边形等。

1. 画线在窗⼝画⼀条线段,可以使⽤Graphics类的drawLine()⽅法:drawLine(int x1,int y1,int x2,int y2) 例如,以下代码在点(3,3)与点(50,50)之间画线段,在点(100,100)处画⼀个点。

g.drawLine(3,3,50,50);//画⼀条线段g.drawLine(100,100,100,100);//画⼀个点。

2. 画矩形有两种矩形:普通型和圆⾓型。

(1) 画普通矩形有两个⽅法:drawRect(int x,int y,int width,int height):画线框围起来的矩形。

其中参数x和y指定左上⾓的位置,参数width和height是矩形的宽和⾼。

fillRect(int x,int y,int width,int height):是⽤预定的颜⾊填充⼀个矩形,得到⼀个着⾊的矩形块。

以下代码是画矩形的例⼦:g.drawRect(80,100,40,25);//画线框g.setColor(Color.yellow);g.fillRect(20,70,20,30);//画着⾊块(2)画圆⾓矩形也有两个⽅法:drawRoundRect(int x,int y,int width, int height, int arcWidth, int arcHeight):是⽤线围起来的圆⾓矩形。

其中参数x和y指定矩形左上⾓的位置;参数width和heigth是矩形的宽和⾼;arcWidth和arcHeight分别是圆⾓弧的横向直径和圆⾓弧的纵向直径。

fillRoundRect(int x,int y,int width,int height,int arcWidth,int archeight):是⽤预定的颜⾊填充的圆⾓矩形。

画图板java课程设计

画图板java课程设计

画图板java课程设计一、课程目标知识目标:1. 学生能掌握Java语言的基本语法和编程结构。

2. 学生能理解画图板的基本原理,掌握使用Java进行图形界面的设计与实现。

3. 学生能运用Java中的事件处理机制,实现与画图板的交互功能。

技能目标:1. 学生能运用Java编程技能,独立设计并实现一个简单的画图板程序。

2. 学生能通过本课程的学习,提升问题分析能力,运用Java语言解决实际问题。

3. 学生能运用所学的知识,对画图板程序进行调试和优化,提高程序的稳定性。

情感态度价值观目标:1. 学生通过动手实践,培养对编程的兴趣,增强学习Java语言的自信心。

2. 学生在小组合作中,培养团队协作能力,学会共同解决问题。

3. 学生能够认识到编程在现实生活中的应用,理解编程对解决实际问题的重要性。

分析课程性质、学生特点和教学要求:本课程为Java语言编程课程,旨在让学生掌握Java编程的基本技能,培养实际编程能力。

学生处于高年级阶段,具有一定的编程基础,对Java语言有初步了解。

根据教学要求,课程目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果。

将目标分解为具体的学习成果:1. 学生能独立完成一个画图板程序的编写,实现基本绘图功能。

2. 学生能对画图板程序进行调试和优化,提高程序性能。

3. 学生在课程学习过程中,积极参与小组讨论,提升团队协作能力。

4. 学生通过课程学习,对编程产生浓厚兴趣,为后续深入学习奠定基础。

二、教学内容本课程教学内容围绕以下三个方面展开:1. Java基本语法和编程结构:包括数据类型、变量、运算符、控制结构、数组等基本概念,确保学生掌握Java编程的基础知识。

2. Java图形用户界面(GUI)设计:涉及Swing库的使用,重点讲解JFrame、JPanel等容器组件以及绘图相关的Graphics类,使学生能够实现画图板界面设计。

3. Java事件处理机制:介绍事件监听器、事件对象等概念,让学生了解并掌握画图板中鼠标、键盘等事件的处理方法。

java实现三级菜单栏_在java中实现左右键菜单

java实现三级菜单栏_在java中实现左右键菜单

java实现三级菜单栏_在java中实现左右键菜单在java中实现左右键菜单在java中使实现右键菜单十分简单,只需用到一个控件:popupmenu.首先,须要声明一个popupmenu对像是。

popupmenupopupmenu1=newpopupmenu();然后新建一些子菜单,这里我们采用创建三个菜单项menuitemmenuitem1=newmenuitem();menuitemmenuitem2=newmenuitem();menuitemmenuitem3=newmenuitem();然后再出来初化,并重新加入监听事件中:menuitem1.setlabel("菜单1");menuitem1.addactionlistener(newjava.awt.event.actionlistener(){//菜单1的事件监听publicvoidactionperformed(actionevente){menuitem1_actionperformed(e);//菜单事件函数}});menuitem2.setlabel("菜单2");menuitem3.setlabel("菜单3");popupmenu1.add(menuitem1);popupmenu1.add(menuitem2);popupmenu1.add(menuitem3);//在this中重新加入popupmenu1add(popupmenu1);这时,菜单已经加到程序中了,现在我们须要搞的就是在页面右键时表明。

先在init中加入鼠标的单击事件,this.addmouselistener(newjava.awt.event.mouseadapter(){ publicvoidmousepressed(mouseevente){this_mousepressed(e);}});再在this_mousepressed(e);中将菜单显示出来voidthis_mousepressed(mouseevente){intmods=e.getmodifiers();//鼠标右键if((mods&inputevent.button3_mask)!=0){//弹头出来菜单popupmenu1.show(this,e.getx(),e.gety());}}//菜单1事件voidmenuitem1_actionperformed(actionevente){//菜单事件1}不好了,谈至这里已经全部完结,是不是非常简单啊这里有一个继承panel类的完整的例子importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclasspanel1extendsjpanel{popupmenupopupmenu1=newpopupmenu();menuitemmenuitem1=newmenuitem();menuitemmenuitem2=newmenuitem();menuitemmenuitem3=newmenuitem();publicpanel1(){try{jbinit();}catch(exceptionex){ex.printstacktrace();}}voidjbinit()throwsexception{this.setlayout(null);menuitem1.setlabel("菜单1");menuitem1.addactionlistener(newjava.awt.event.actionlistener(){ publicvoidactionperformed(actionevente){menuitem1_actionperformed(e);}});menuitem2.setlabel("菜单2");menuitem3.setlabel("菜单3");this.addmouselistener(newjava.awt.event.mouseadapter(){publicvoidmousepressed(mouseevente){this_mousepressed(e);}});popupmenu1.add(menuitem1);popupmenu1.add(menuitem2);popupmenu1.add(menuitem3);add(popupmenu1);}voidthis_mousepressed(mouseevente){intmods=e.getmodifiers();//鼠标右键if((mods&inputevent.button3_mask)!=0){//弹头出来菜单popupmenu1.show(this,e.getx(),e.gety());}}voidmenuitem1_actionperformed(actionevente){ //菜单事件}}。

java图形用户界面设计教程

java图形用户界面设计教程

第4章图形用户界面设计本章要点● Java图形用户界面设计的基本知识●布局管理器的应用● Java常用图形用界面设计组件的应用● Java常用组件事件处理的应用4.1 认识AWT包和Swing包用户界面是计算机用户与软件之间的交互接口。

一个功能完善,使用方便的用户界面可以使软件的操作更加简单,使用户与程序之间的交互更加有效。

因此图形用户界面(graphics user interface,GUI)的设计和开发已经成为软件开发中的一项重要的工作。

Java语言提供的开发图形用户界面(GUI)的功能包括AWT(Abstract Window Toolkit)和Swing两部分。

这两部分功能由Java的两个包来完成-awt和swing。

虽然这两个包都是用于图形用户界面的开发,但是它们不是同时被开发出来了。

awt包是最早被开发出来的。

但是使用awt包开发出来的图形用户界面并不完美,在使用上非常的不灵活。

比如awt包所包含的组件,其外观是固定的,无法改变,这就使得开发出来的界面非常死板。

这种设计是站在操作系统的角度开发图形用户界面,主要考虑的是程序与操作系统的兼容性。

这样做的最大问题就是灵活性差,而且程序在运行时还会消耗很多系统资源。

由于awt包的不足表现,SUN公司于1998年针对它存在的问题,对其进行了扩展,开发出了Swing,即swing包。

但是,SUN公司并没有让swing包完成替代awt包,而是让这两个包共同存在,互取所需。

awt包虽然存在缺点,但是仍然有可用之处,比如在图形用户界面中用到的布局管理器、事件处理等依然采用的是awt包的内容。

Java有两个主要类库分别是Java包和Javax包。

在Java包中存放的是Java语言的核心包。

Javax包是Sun公司提供的一个扩展包,它是对原Java包的一些优化处理。

swing包由于是对awt包的扩展和优化,所以是存放在Javax包下的,而awt包是存放在Java包下的。

Java语言程序设计:第十章 Java图形用户界面

Java语言程序设计:第十章 Java图形用户界面

t}ryesflrs{eaetmD{teer.fypaau{cltkC(l)o; seOperation(EXIT_ON_CLOSE);
选中“ToGoelnUyke}DsiItrMt.caiegmtjefaebreamxtaeIcHtncnmDnLheeaistoea}ep((gidf)oE.ctae;veinkxoaurarAc单.ntcllsstcieo.dTnc击ephmpoardrtetmotLi(i“FneoeEleokte(nnFnS)xoieiSttl”ec(te;kla)}iC”exzA.cgceplkneaetT=dtipsoS“rFtsanicoSNecrnaeeeav)(exlem(){nc;ASeellp”(iz)t)ei保;o()n存;)源{ 文U件I和M工an程a文g件er.getS

有间距
CENTER
的 East
组 容se器tHgap(int hgap)

setVgap(int vgap)

将组件间的水平间距设置为指定的值

将组件间的垂直间距设置为指定的值
下边的组件
South
天津职业技术师范大学
BorderLayout
…… class testFrame extends JFrame {
天津职业技术师范大学
BorderLayout
North

边 West 的
组 容器

上边的组件 CENTER
下边的组件
South
右 边 的 East 组 件
天津职业技术师范大学
BorderLayout
North
方法
左 BorderLay边out( )
West 的

javapaint方法

javapaint方法

javapaint方法在Java中,可以使用paint方法来实现对组件进行绘制的功能。

paint方法是Swing组件中的一个方法,用于进行组件的绘制操作。

下面将详细介绍Java的paint方法。

首先,paint方法是在组件需要被重绘时由Java虚拟机自动调用的,应用程序通常无需自己调用paint方法。

在组件首次显示时或需要进行重绘时,paint方法将自动被调用。

paint方法的方法签名如下:```public void paint(Graphics g)```paint方法的参数是一个Graphics对象,它提供了一系列的绘图方法用于完成绘制操作。

在paint方法中,通常需要完成以下几个步骤:1. 获取Graphics对象:用于绘制的Graphics对象可以通过paint方法的参数获取,此时可以使用Graphics对象的各种方法来完成绘制操作。

2. 设置绘图属性:在开始绘制之前,通常需要设置一些绘画属性,比如绘图颜色、线条粗细等。

Graphics对象提供了一系列用于设置绘画属性的方法,比如setColor、setStroke等。

3. 进行绘制操作:在绘制之前,需要确定绘制的内容和位置。

根据需要,可以使用Graphics对象的各种绘图方法,如drawLine、drawRect、fillRect等来绘制需要的图形。

4. 释放资源:绘制操作完成后,通常需要释放绘图资源,以便其他组件或画布进行绘制操作。

可以通过Graphics对象的dispose方法来释放绘图资源。

下面是一个简单的示例代码,展示了如何在一个JPanel类中使用paint方法进行绘制操作:```javaimport javax.swing.*;import java.awt.*;public class MyPanel extends JPanelpublic void paint(Graphics g)super.paint(g);//设置绘图属性g.setColor(Color.RED);//绘制操作g.drawLine(10, 10, 100, 100);g.drawRect(50, 50, 100, 100);g.fillRect(200, 200, 100, 100);//释放资源g.dispose(;}```在上面的代码中,首先继承了JPanel类,并重写了其paint方法。

java画图课程设计

java画图课程设计

java画图课程设计一、教学目标本节课旨在让学生掌握Java基本绘图方法,能够使用Java编写简单的图形界面程序。

1.了解Java绘图的基本概念和方法。

2.掌握Java中常用的绘图类和方法。

3.理解图形界面程序的设计原理。

4.能够使用Java编写简单的图形界面程序。

5.能够灵活运用Java绘图方法,实现基本的图形绘制。

6.能够根据需求,设计并实现简单的图形界面程序。

情感态度价值观目标:1.培养学生对计算机编程的兴趣和热情。

2.培养学生解决问题的能力和创新精神。

3.培养学生团队协作和交流的能力。

二、教学内容本节课的教学内容主要包括Java绘图的基本概念和方法,以及图形界面程序的设计原理。

1.Java绘图基本概念和方法。

2.Java中常用的绘图类和方法。

3.图形界面程序的设计原理。

4.实例演示和练习。

三、教学方法本节课采用讲授法、案例分析法和实验法相结合的教学方法。

1.讲授法:用于讲解Java绘图的基本概念和方法,以及图形界面程序的设计原理。

2.案例分析法:通过分析典型案例,让学生理解和掌握Java绘图的方法和技巧。

3.实验法:让学生通过实际操作,动手编写Java程序,巩固所学知识。

四、教学资源1.教材:《Java程序设计》。

2.参考书:《Java绘图教程》。

3.多媒体资料:PPT课件。

4.实验设备:计算机。

五、教学评估本节课的评估方式包括平时表现、作业和考试。

1.平时表现:通过课堂参与、提问和回答问题等方式,评估学生在课堂上的积极性和主动性。

2.作业:布置相关的绘图程序练习,评估学生对Java绘图方法的掌握程度。

3.考试:期末考试中包含Java绘图相关的题目,评估学生对Java绘图的全面理解和应用能力。

六、教学安排本节课的教学安排如下:1.教学进度:按照教材的章节顺序,逐步讲解Java绘图的基本概念和方法。

2.教学时间:每节课45分钟,其中30分钟用于讲授和案例分析,15分钟用于实验和实践。

3.教学地点:计算机实验室,确保学生能够直接进行绘图程序的编写和运行。

java图形界面设置教程

java图形界面设置教程

Java实例——(续)
setSize(300,200); bl.setText(“欢迎使用Java语言”); bl.setBounds(50,50,150,20); bl.setAlignment(Label.CENTER); bl.setBackground(Color.blue); bl.setForeground(Color.red); add(bl); setVisible(true); } public static void main(String args[]){ new Label1(); } }
简单GUI程序
1.引用需要的包和类。 2.设置一个顶层的容器。 3.根据需要为容器设置布局管理器或使用默认布 局管理器。 4.将组件添加到容器内。 5.为响应事件的组件编写事件处理代码。
建立窗口Frame类的操作
创建窗口的基本和必要操作包括以下方面:
1.设置窗口的大小。 2.设置窗口的标题。 3.确定窗口在屏幕的放置位置。 4.显示窗口。 5.关闭窗口。
window事件及其响应每一个事件类都有一个唯一的事件处理方法接口如处理鼠标事件mousee钮actionevent事件类的对应接口为actionlistener接监听者向事件源注册使监听者能够监听到并处理事件源产生的事件如actionevent事件实现其接口actionlistener
Java实例——(续)
but.setBounds(50,50,100,50); but.addActionListener(fra); fra.add(but,BorderLayout.CENTER); fra.setVisible(true); } public void actionPerformed(ActionEvent e){ fra.setBackground(Color.red); } }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

功能综述复习、巩固Java讥占T1基刊好认进一挥对Java语言的理解和掌握课程设计为学生提供了一个既动手又动脑、独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。

提高学生适应实际,实践编程的能力,培养学生在项目开发中团队合作精神、创新意识及能力。

实现简单绘图功能,具体要求:画直线,画空心或实心椭圆、画空心或实心矩形、画多边形(图形的位置和大小可在程序中设定)。

(一)分析与设计说明本学期对于java语言的学习,本程序运用图形界面和绘图功能,均已学过利用Eclipse工具,采用java语言解决问题。

界面上方相应所需的菜单选项或下方的按钮,得到所需图形,完成功能的实现。

运行程序,输入图形类型,并输入两个坐标参数(不超过界面的大小),再选择程序(二)代码分析/图形界面的实现(图形界面包括2个标签,4个菜单,6个按钮,5个文本组件)//导入程序所需要的包import java.awt.*;import java.awt.eve nt.*;import javax.swi ng.*;public class Draw exte nds JFrame impleme nts Actio nListe ner{private static fin al l ong serialVers ionUID = 1L;private static final int WIDTH=600;private static final int HEIGHT=600;JMe nuBar men ubar;JMe nu men u1,me nu 2,me nu 3,me nu4;JMe nultem item1,item2,item3,item4,item5,item6;JButton butt on 1,butt on 2,butto n3,butto n4 ,butto n5,butto n6;JLabel label1;Mypa nel pan e1= new Mypa nel();DrawCa nvas JD=n ull;//将图形界面设为名为“控制绘图”且长宽都为600的图形界面。

public Draw(){super("控制绘图");setSize(WIDTH,HEIGHT);Container c=getC onten tPa ne();JD=new DrawCa nvas();JPa nel pane2=new JPa nel(); Compe nt(c, pan e2);}private void Compe nt(C ontainer c, JPa nel pan e2) {men ubar =new JMe nuBar();menu仁new JMenu(”直线");menu2=new JMenu(” 椭圆");menu3=new JMenu(” 矩形");menu4=new JMenu(” 多边形");item仁new JMe nultem(”直线");item2=new JMen ultem(”空心椭圆“item3=new JMen ultem(”实心椭圆“item 4=new JMe nultem(”空心矩形“item5=new JMe nultem(”实心矩形“item6=new JMen ultem(”多边形");iteml.addActio nListe ner(this); item2.addActio nListe ner(this); item3.addActi on Listener(this); item4.addActio nListe ner(this); item5.addActi on Liste ner(this); item6.addActi onListe ner(this); label 仁new JLabel("");men u1.add(item1);menu 2.add(item2);menu 2.addSeparator();menu 2.add(item3);menu 3.add(item4);menu 3.addSeparator();menu 3.add(item5);menu 4.add(item6);menu bar.add(me nu1);menu bar.add(me nu 2); menu bar.add(me nu 3);menu bar.add(me nu 4); setJMe nuBar(me nu bar);butt on 1= new JButt on (”直线");button2=new JButton(”空心椭圆");button3=new JButton(”实心椭圆");button4=new JButton(”空心矩形");button5=new JButton(”实心矩形");button6=new JButton(”多边形");pan e2.add(butt on 1); pan e2.add(butt on 2); pan e2.add(butt on 4); pan e2.add(butt on 6);pan e2.add(label1);pan e2.add(butt on 3); pan e2.add(butt on 5);butt on 1.addAct ion Liste ner(this); butt on 2.addAct ion Liste ner(this); butt on 3.addAct ion Liste ner(this); butt on4 .addAct ion Liste ner(this); butt on 5.addAct ion Liste ner(this); butt on6.addAct ion Liste ner(this);c.add(pa ne1,BorderLayout.NORTH);c.add(pa ne2,BorderLayout.SOUTH);c.add(JD,BorderLayout.CENTER);pa ne2.setLayout( new GridLayout(2,5,20,10));}/*Draw 继承了JFrame,因此可以显示,首先声明标签、菜单、按钮和一个JFrame窗口。

然床通过构建标签、菜且、按钮菜单项添加理菜且屮。

标签、菜单、按钮添加理窗口容器中,设置容器的大小及添加按钮和菜单事件监听者。

*//*处理事件监听器事件*/public void acti on Performed(Act ion Eve nt e) {int x1,y1,x2,y2;x1=I nteger.parsel nt(pa ne1.getA().getText());y1=I nteger.parse In t(pa ne1.getB().getText());x2=I nteger.parse In t(pa ne1.getC().getText());y2=I nteger.parse In t(pa ne1.getD().getText());int x3[]={280,120,50,90,210,280};int x4[]={20,50,100,110,70,20};int n=5;//当监听器监听到鼠标点击菜单项实心椭圆时,绘制实心椭圆图形else if(e.getSource()==item3){if(JD!=null) {JD.setL in e(0);JD.setOval(0);JD.setfillOval(1);JD.setRect(0); JD.setfillRect(O);JD.setPolygo n(0);JD.setPositio n(x1,y1,x2,y2);JD.repai nt();}}//当监听器监听到鼠标点击菜单项直线时,绘制直线图形//当监听器监听到鼠标点击菜单项空心椭圆时,绘制空心椭圆图形//当监听器监听到鼠标点击菜单项空心矩形时,绘制空心矩形图形//当监听器监听到鼠标点击菜单项实心矩形时,绘制实心矩形图形//当监听器监听到鼠标点击菜单项多边形时,绘制多边形图形//当监听器监听到鼠标点击按钮直线时,绘制直线图形if(e.getSource()==butt on 1){if(JD!=null) {JD.setL in e(1);JD.setOval(0);JD.setfillOval(0);JD.setRect(0);JD.setfillRect(O);JD.setPolygo n(0);JD.setPositio n(x1,y1,x2,y2);JD.repai nt();}}//当监听器监听到鼠标点击按钮空心椭圆时,绘制空心椭圆图形//当监听器监听到鼠标点击按钮实心椭圆时,绘制实心椭圆图形//当监听器监听到鼠标点击按钮空心矩形时,绘制空心矩形图形//当监听器监听到鼠标点击按钮实心矩形时,绘制实心矩形图形//当监听器监听到鼠标点击按钮多边形时,绘制多边形图形//3.主函数的实现://在主函数中创建了一个jf ft'l -.用.,:产半国形界址。

愷置具」临利丿、7不4戈变.!」:-¥ public static void main( Stri ng []args){JFrame jf=new Draw();jf.setDefaultCloseOperati on (JFrame.EXIT_ON_CLOSE);jf.setResizable(false);jf.setVisible(true);}}//图形绘制的实现//导入该程序所需要的包import java.awt.*;import javax.swi ng.*;//DrawCa nvas实现图形的绘制(首说 F心梢I;:实心呦岡 F心护氏勺[心匕闿多也形)。

public class DrawCa nvas exte nds JPa nel{private static fin al l ong serialVers ionUID = 1L;int x1,y1,x2,y2;in t lin e,oval,filloval,rect,fillrect,polygo n;int x3[],x4[],n;public void setPositi on (i nt x1,i nt y1,i nt x2,i nt y2){this.x1=x1;this.y1=y1;this.x2=x2;this.y2=y2;}public void setPolPosition(int x3[],int x4[],int n){this.x3=x3;this.x4=x4;this. n=n;}public void setL in e(i nt lin e){this.li ne=li ne;}public void setOval( int oval){this.oval=oval;}public void setfillOval(i nt filloval){this.filloval=filloval;}public void setRect(i nt rect){this.rect=rect;}public void setfillRect(i nt fillrect){this.fillrect=fillrect;}public void setPolygo n(i nt polygo n){this.polygo n=polyg on;}public void pain tComp onen t(Graphics g){g.setColor(getBackgro un d());g.fillRect(O,O,this.getWidth(),this.getHeight());g.setColor(Color.black);if(li ne==1){g.drawL in e(x1,y1,x2,y2);}else if(oval==1){g.drawOval(x1, y1, x2, y2);}else if(filloval==1){g.fillOval(x1,y1,x2,y2);}else if(rect==1){g.drawRect(x1, y1, x2, y2);}else if(fillrect==1){g.fillRect(x1,y1,x2,y2);}else if(polygo n==1){g.drawPolygo n( x3,x4 ,n);}}}//设置参数的实现//导入程序所需的包import java.awt.*;import javax.swi ng.*;//Mypa nel类中声明了标签并使得通过创建该类的实例将其添加到图形界面中public class Mypa nel exte nds JPa nel {private static fin al l ong serialVers ionUID = 1L;Label Iabel1,label2,label3,label4;TextField a,b,c,d,x;Mypa nel(){label2=new Label("请输入:"); label仁new Label("参数");/*参数最大可设置4 I - ■:、—600 600。

相关文档
最新文档