swing简介外文翻译本科学位论文.docx

上传人:知****量 文档编号:91604411 上传时间:2023-05-27 格式:DOCX 页数:21 大小:54.01KB
返回 下载 相关 举报
swing简介外文翻译本科学位论文.docx_第1页
第1页 / 共21页
swing简介外文翻译本科学位论文.docx_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《swing简介外文翻译本科学位论文.docx》由会员分享,可在线阅读,更多相关《swing简介外文翻译本科学位论文.docx(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、附录毕业设计(论文)外文文献及翻译题目:文档管理发布平台院(系) 专 业 班 级 姓 名 学 号 导 师 2014年 5月8日swing简介一Swing概念:布局、模型和事件 布局:Swing 包括许多布局,布局也是类,负责处理组件在应用程序中的摆放位置,以及在应用程序改变尺寸或者删除、添加组件时对组件进行相应处理。 事件:您需要对按下按钮、单击鼠标和用户在 UI 上能做的每件事进行响应。想像一下,如果不能响应会发生什么 用户单击之后,什么变化也没有。 模型: 对于更高级的组件(列表、表格和树),以及一些像 JComboBox 这样的更容易的组件来说,模型是处理数据最有效的途径。它们把大部分处

2、理数据的工作从实际的组件本身撤出来(请回想一下前面讨论的 MVC),并提供了一个公共数据对象类(例如 Vector 和 ArrayList)的包装器。 1) 简单布局 就像在前面提到过的,布局替您处理组件在应用程序中的摆放。您的第一个问题可能是“为什么不能用像素告诉它应当在什么地方呢?”是的,您可以这样做,但是在窗口改变大小的时候,或者更糟一些情况,即用户改变其屏幕的分辨率的时候,亦或在有人想在其他操作系统上试用应用程序的时候,您立刻就会遇到麻烦。布局管理器把这些担心一扫而空。不是每个人都用相同的设置,所以布局管理器会创建“相对”布局,允许您指定组件相对于其他组件的摆放方式,决定事物改变尺寸的

3、方式。这是好的部分:比听起来更容易。只要调用 setLayout(yourLayout) 设置布局管理器即可。后面对 add() 的调用可以将组件添加到容器中,并让布局管理器负责将它放在应当的位置上。 目前在 Swing 中包含了大量布局;看起来好象每次发布都会有一个新布局负责不同的目的。但是,有些经过实践检验的布局一直存在,而且会永远存在,我指的是永远 因为从 1995 年 Java 语言的第一个发行版开始,就有这些布局。这些布局是:FlowLayout、GridLayout 和 BorderLayout。 FlowLayout 从左到右安排组件。当空间不足时,就移到下一行。它是使用起来最简

4、单的布局,因此,也就是能力最弱的布局:setLayout(new FlowLayout(); add(new JButton(Button1); add(new JButton(Button2); add(new JButton(Button3); FlowLayout 实例GridLayout 就像您想像的那样工作:它允许指定行和列的数量,然后在添加组件时把组件放在这些单元格中: setLayout(new GridLayout(1,2); add(new JButton(Button1); add(new JButton(Button2); add(new JButton(Button3)

5、; GridLayout 实例即使 Swing 中添加了许多新的布局管理器,BorderLayout 仍然是其中非常有用的一个。即使有经验的 UI 开发人员也经常使用 BorderLayout。它使用东、南、西、北、中的概念在屏幕上放置组件: setLayout(new BorderLayout(); add(new JButton(Button1), North); add(new JButton(Button2), Center); add(new JButton(Button3), West); GridBagLayout 实例虽然上面的示例对于简单的布局来说很好,但是更高级的 UI 需

6、要更高级的布局管理器。这是 GridBagLayout 发挥作用的地方。不幸的是,使用它的时候极易混淆、极为困难,每个曾经用过它的人都会同意这点。我也不能反对;但是除了它的困难之外,它可能是用 Swing 内置的布局管理器创建漂亮 UI 的最好方式。2) 事件最后,我们来到 Swing 最重要的一部分:处理事件,对 UI 的交互作出反应。Swing 用事件/侦听器模型处理事件。这个模型的工作方式是:允许某个类登记到某个组件的某个事件上。登记到事件的这个类叫做侦听器,因为它等候组件的事件发生,而且在事件发生时采取行动。组件本身知道如何“激活”事件(即,知道它能生成的交互类型,以及如何让侦听器知道

7、这个交互什么时候发生)。组件与包含有关交互信息的事件和类针对交互进行通信。把技术方面的空谈放在一边,我们来看几个 Swing 中事件的实例。首先从最简单的示例开始,即一个 JButton,按下它的时候,会在控制台上输出“Hello”。JButton 知道它什么时候被按下;这是在内部处理的,不需要代码处理它。但是,侦听器需要进行登记,以接收来自 JButton 的事件,这样您才能输出“Hello”。listener 类通过实现 listener 接口然后调用 JButton 上的 addActionListener() 做到这一点: / Create the JButton JButton b

8、= new JButton(Button); / Register as a listener b.addActionListener(new HelloListener(); class HelloListener implements ActionListener / The interface method to receive button clicks public void actionPerformed(ActionEvent e) System.out.println(Hello); 从这两个示例,您应当能够理解事件/侦听器模型在 Swing 中如何工作了。实际上,Swing

9、中的每个交互都是以这种方式处理的,所以通过理解这个模型,您就立即能够理解在 Swing 中如何处理每个事件,以及如何对用户可能抛给您的任何交互做反应了。3) 模型现在,您应当了解了 Java 的集合(Collection),这是一组处理数据的 Java 类。这些类包括 ArrayList、HashMap 和 Set。大多数应用程序在反复处理数据时,经常用这些类。但是,当需要在 UI 中使用这些数据类时,出现了一个限制。UI 不知道如何显示它们。请先想一分钟。如果有一个 JList 和一个某种数据对象(例如 Person 对象)的 ArrayList,JList 怎样才能知道要显示什么?它是要显

10、示某个人的名字,还是连名带姓一起显示?这就是模型的概念发挥作用的地方了。虽然模型这个术语表达的范围更大,但是在本教程的示例中,我用 UI 模型这个术语描述组件用来显示数据的类。在 Swing 中每个处理集合数据的的组件都采用模型的概念,而且这也是使用和操纵数据的首选方法。它清晰地把 UI 的工作与底层数据分开(请回想 MVC 示例)。模型工作的机制是向组件描述如何显示集合数据。我说的“描述”指的是什么呢?每个组件需要的描述略有不同:l JComboBox 要求其模型告诉它把什么文本作为选项显示,以及有多少选项。l JTable 要求的更多:它要求模型告诉它存在多少列和多少行,列名称、每列的类以

11、及在每个单元格中显示什么文本。模型示例我们来看看模型如何工作,在一个简单的 JComboBox 示例中使用模型。在 JComboBox 前面的演示中,我介绍了如何调用 setItem() 向数据中添加项目。虽然对于简单的演示,这样做可以接受,但是在实际的应用程序中很少这么用。毕竟,在有 25 个选项,而且选项不断变化的时候,您还真的想每次都调用 addItem() 25 次对这些选项进行迭代吗?当然不是。JComboBox 包含一个方法调用 setModel(),它接受 ComboBoxModel 类的实例。应当用这个方法代替 addItem() 方法来创建 JComboBox 中的数据。假设

12、有一个 ArrayList,其中使用字母表作为其数据(“A”、“B”、“C” ,等等): MyComboModel model = new MyComboModel(alphaList); myComboBox.setModel(model); public class MyComboModel implements ComboBoxModel private List data = new ArrayList(); private int selected = 0; public MyComboModel(List list) data = list; public void setSele

13、ctedItem(Object o) selected = data.indexOf(o); public Object getSelectedItem() return data.get(selected); public int getSize() return data.size(); public Object getElementAt(int i) return data.get(i); 采用模型时更好的地方是:您可以反复重用它。例如,假设 JComboBox 的数据需要从字母表变成 1 到27 的数字。那么只用一行就可以实现这个变化:用新的数据 List 添加 JComboBox,

14、不需要使用额外的代码: myComboBox.setModel(new MyComboModel(numberList); 模型在 Swing 中是非常有好处的特性,因为它们提供了代码重用功能,而且使数据处理更加容易。更常见的应用是在大型应用程序中,服务器端开发人员创建和检索数据,并把数据传递给 UI 开发人员。如何处理这些数据和正确地显示它们,取决于 UI 开发人员,而模型就是实现这项任务的工具。二、UI 组件简介在开始学习 Swing 之前,必须回答针对真正初学者的一个问题:什么是 UI?初学者的答案是“用户界面”。但是因为本教程的目标是要保证您不再只是个初学者,所以我们需要比这个定义更高

15、级的定义。所以,我再次提出这个问题:什么是 UI?您可能把它定义成您按下的按钮、打字的地址栏 、打开和关闭的窗口,等等,这些都是 UI 的元素,但是除了在屏幕上看到的这些之外,还有更多都是 UI 元素。比如鼠标、键盘、音量、屏幕颜色、使用的字体,以及一个对象相对于另一个对象的位置,这些都包含在 UI 之中。实际上,在计算机和用户的交互之中扮演角色的任何对象都是 UI 的组成部分。这看起来足够简单,但是您应当惊讶的是,有许多人和大型公司已经为它努力了很多年。实际上,现在有的大学专业的惟一课程就是研究这种交互。Swing 的角色Swing 是 Java 平台的 UI 它充当处理用户和计算机之间全部

16、交互的软件。它实际上充当用户和计算机内部之间的中间人。Swing 到底是如何做这项工作的呢?它提供了处理前面一节中描述的 UI 各方面内容的机制:l 键盘:Swing 提供了捕捉用户输入的方法。 l 键盘:swing 提供了捕捉用户输入的方法。l 颜色:Swing 提供改变在屏幕上看到的颜色的方法。l 颜色:swing 提供改变在屏幕上看到的颜色的方法。 l 打字的地址栏:Swing 提供了文本组件,处理所有普通任务。 l 打字的地址栏:Swing 提供了文本组件,处理所有的普通任务。l 音量:Swing 不太擅长。 简单的swing小部件:1) JComponentSwing 的整个可视组件

17、库的基础构造块是 JComponent。它是所有组件的父类。它是一个抽象类,所以不能创建 JComponent,但是作为类层次结构的结果,从字面意义来说它包含了数百个函数,Swing 中的每个组件都可以使用这些函数。显然,有些概念要比其他概念重要,所以对于本教程,需要学习的重要的东西是:l JComponent 不仅是 Swing 组件的基类,还是定制组件的基类(有关的更多信息在“中级 Swing”教程中)。l JComponent 不仅是Swing 组件的基类,还是定制组件的基类。l 它为所有组件提供了绘制的基础架构 一些方便进行组件定制的东西(同样,在“中级 Swing”中,有关于这个主题

18、的更多信息)。 l 它知道如何处理所有的键盘按键。所以类只需要侦听特定的键。 l 它包含 add() 方法,可以添加其他 JComponent。换种方式来看,可以把任意 Swing 组件添加到其他任何 Swing 组件,从而构造嵌套组件(例如,JPanel 包含 JButton,甚至包含一些古怪的组合,例如 JMenu 包含 JButton)。 2)JLabelSwing 库中最基础的组件是 JLabel.实际上,在整个应用程序中,不仅把 JLabel 用作文本描述,还将它用作图片描述。每当在 Swing 应用程序中看到图片的时候,它就有可能是 JLabel。JLabel 对于 Swing 初

19、学者来说没有许多意料之外的方法。基本的方法包括设置文本、图片、对齐以及标签描述的其他组件:l get/setText(): 获取/设置标签的文本。 l get/seticon(): 获取/设置标签的图片。 l get/setHorizontalAlignment(): 获取/设置文本的水平位置。 l get/setVerticalAlignment(): 获取/设置文本的垂直位置。 l get/setDisplayedMnemonic(): 获取/设置标签的访问键(下划线文字)。 l get/setLableFor(): 获取/设置这个标签附着的组件,所以当用户按下 Alt+访问键时,焦点转移

20、到指定的组件。 3)JButtonSwing 中的基本动作组件 JButton,是与每个窗口中都能看到的 OK 和 Cancel 一样的按钮;这些按钮所做的正是您希望它们做的工作 在单击它们之后,将发生一些事情。用来改变 JButton 属性的方法与 JLabel 的方法类似(您可能发现,在大多数 Swing 组件中,这些属性都类似)。它们控制文本、图片和方向:l get/setText(): 获取/设置标签的文本。 l get/seticon(): 获取/设置标签的图片。 l get/setHorizontalAlignment(): 获取/设置文本的水平位置。 l get/setVerti

21、calAlignment(): 获取/设置文本的垂直位置。 l get/setDisplayedMnemonic(): 获取/设置访问键(下划线字符),与 Alt 按钮组合时,造成按钮单击。 4)JTextField在处理 JTextField 时,只需要关注一个方法 这应当是很明显的,这个方法就是设置文本的方法: get/setText(),用于获取/设置 JTextField 中的文本。5)JFrameJFrame 类是一个容器,允许您把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。JFrame 实际上不仅仅让您把组件放入其中并呈现给用户。比起它表面上的简单性,它实际上是 Sw

22、ing 包中最复杂的组件。为了最大程度地简化组件,在独立于操作系统的 Swing 组件与实际运行这些组件的操作系统之间,JFrame 起着桥梁的作用。JFrame 在本机操作系统中是以窗口的形式注册的,这么做之后,就可以得到许多熟悉的操作系统窗口的特性:最小化/最大化、改变大小、移动。但是对于本教程的目标来说,把 JFrame 当作放置组件的调色板就足够了。可以在 JFrame 上调用的一些修改属性的方法是:l get/setTitle(): 获取/设置帧的标题。 l get/setState(): 获取/设置帧的最小化、最大化等状态。 l is/setVisible(): 获取/设置帧的可视

23、状态,换句话说,是否在屏幕上显示。 l get/setLocation(): 获取/设置帧在屏幕上应当出现的位置。 l get/setsize(): 获取/设置帧的大小。 l add(): 将组件添加到帧中。 6)JComboBox组合框与下拉选择相似,区别在于使用组合框时用户可以不从列表中选择项目,还可以选择一个(而且只有一个)项目。在某些版本的组合框中,还可以输入自己的选择。浏览器的地址栏就是一个示例:它是一个允许输入自己选项的组合框。JComboBox 的重要函数包括 JComboBox 包含的数据。需要有一种方法来设置 JComboBox 中的数据、修改数据、在用户选择时得到用户的选择

24、。可以使用以下 JComboBox 方法:l addItem():添加一个项目到 JComboBox. l get/setSelectedIndex():获取/设置 JComboBox 中选中项目的索引。 l get/setSelectedItem():获取/设置选中的对象。 l removeAllItems():从 JComboBox 删除所有对象。 l remoteItem():从 JComboBox 删除特定对象。 7)JTextFieldJTextField 的一个细微变化是 JPasswordField,它允许您隐藏在文本字段区域中显示的字符。JPasswordField 上额外的“

25、安全性”方法对 JTextField 的行为做了轻微改变,所以不能阅读文本:l get/setEchoChar():获取/设置每次字符输入时在 JPasswordField 中显示的字符。在获取口令时,不会返回“回声”,而是返回实际的字符。l getText(): 不应当 使用这个函数,因为它会带来可能的安全问题(String 会保存在内存中,可能的堆栈转储会暴露口令)。l getPassword():这是从 JPasswordField 中获得口令的恰当方法,因为它返回一个包含口令的 char。为了保证恰当的安全性,数组应当被清为 0,以确保它不会保留在内存中。 8)JMenu/JMenuI

26、tem/JMenuBarJMenu、JMenuItem 和 JMenuBar 组件是在 JFrame 中开发菜单系统的主要构造块。任何菜单系统的基础都是 JMenuBar。它平淡而乏味,但却是必需的,因为每个 JMenu 和 JMenuItem 都要用它构建。要用 setJMenuBar() 方法把 JMenuBar 附着到 JFrame。一旦将它附加到 JFrame 中,就可以添加所有想要的菜单、子菜单和菜单项。JMenu/JMenuItem 的区别看起来可能很明显,但实际上,在幕后看起来并不像表面那样。看看类的类层次结构,就知道JMenu 是 JMenuItem 的子类。但是,在表面上,它

27、们是有区别的:用 JMenu 包含其他 JMenuItem 和 JMenu;JMenuItem 在选中时触发操作。JMenuItem 也支持快捷键的概念。与您用过的大多数应用程序一样,Swing 应用程序允许您按下 Ctrl+(某个键)来触发一个操作,就像选中菜单键本身一样。想想用来剪切和粘贴的快捷键 Ctrl+X 和 Ctrl+V。除此之外,JMenu 和 JMenuItem 都支持访问键。用 Alt 键与某个字母关联,模拟菜单本身的选择(例如,在 Windows 中按下 Alt+F,然后按下 Alt+x 就可以关闭应用程序)。这些类需要的重要方法是:JMenuItem and JMenu:

28、 l get/setAccelerator():获取/设置用作快捷键的 Ctrl+键。 l get/setText():获取/设置菜单的文本。 l get/setIcon():获取/设置菜单使用的图片。 l JMenu 专用: add():添加另外一个 JMenu 或 JMenuItem 到 JMenu(创建嵌套菜单)。 9)JToolBarJToolBar 充当其他组件(JButton、JComboBoxe 等)的调色板,共同构成您在大多数应用程序中熟悉的工具栏。工具栏允许程序把常用的命令放在可以迅速发现的位置,并把它们以常用命令组的形式组合在一起。一般(但不总是这样)情况下,工具栏按钮在菜

29、单栏中会有对应的命令。虽然这不是必需的,但已经变成了一种公共实践.JToolBar 也提供了您在其他工具栏中看到过的其他功能:“浮动”的能力(也就是成为主帧顶部独立的帧)。非浮动 JToolBar对于 JToolBar,要记住的重要方法是:is/setFloatable(),它获取/设置 JToolBar 是否可以浮动。10)JTextAreaJTextArea 比 JTextField 更进了一步。JTextField 被局限在一行文本中,而 JTextArea 扩展了这个能力,支持多行文本。可以把它想像成一个空白页,您可以在其中的任意地方进行输入。正如您可能猜到的,JTextArea 包含

30、许多与 JTextField 相同的功能,毕竟,它们实际上是相同的组件。但是 JTextArea 提供了一些额外的重要功能,可以把它区别开。这些功能包括单词自动换行的能力(即把长文本自动换行到下一行,而不是将单词从中断开)、对文本自动换行的能力(即把长的文本行移动到下一行,而不是创建一个需要水平滚动条的非常长的行)。支持行和单词的自动换行的重要方法是:l is/setLineWrap():设置在行过长的时候是否要自动换行。 l is/setWrapStyleWord():设置在单词过长的时候是否要把长单词移到下一行。 11)JScrollPane上面的示例构造完成之后,假设 JTextArea

31、 包含太多文本,而给定的空间中容纳不下,那这该怎么办?如果您以为会自动出现滚动条,那么很不幸,您错了。JScrollPane 添补了这个空白,为 Swing 组件提供了处理所有与滚动条相关的动作。所以虽然为每个需要的组件提供滚动块可能有些痛苦,但是一旦添加了它,它就会自动处理每件事,包括在需要的时候隐藏/显示滚动条。除了用需要自动换行的组件创建 JScrollPane 之外,不必直接处理它。根据上面的示例,用 JTextArea 调用 JScrollPane 的构造函数,这为 JTextArea 创建了在文本过长时滚动的能力: JScrollPane scroll = new JScrollP

32、ane(getTextArea(); add(scroll); JScrollPane 也公开了它将创建的两个 JScrollBar。这些 JScrollBar 组件也包含一些方法,可以用这些方法来修改组件的行为(虽然它们不在本教程的范围之内)。使用 JScrollPane 需要的方法是:l getHorizontalScrollBar():返回水平的 JScrollBar 组件。 l getVerticalScrollBar():返回垂直的 JScrollBar 组件. l get/setHorizontalScrollBarPolicy():这个“策略”可以是以下三个之一:Always、N

33、ever 或 As Needed。 l get/setVerticalScrollBarPolicy():与水平函数相同。 12)JTable在考虑 JTable 时,请想像一下一个 Excel 工作表,这样就可以对 JTable 在 Swing 中的作用有一个清晰的印象。它与工作表共享许多相同的特征:单元格、行、列、移动列、隐藏列等。JTable 把 JList 的想法更进了一步。它不是在一列中显示数据,而是在多列中显示数据。让我们以人为例。JList 只能显示人的一个属性 例如他或她的名字。而 JTable 就能够显示多个属性 名字、年龄、地址,等等。JTable 是支持提供数据的大多数信

34、息的 Swing 组件。许多 JList 中的概念也扩展到了 JTable,其中包括不同的选择间隔的概念。但是 JList 中一列的概念变成了 JTable 的单元格的概念。这意味着在 JTable 中进行选择时会有不同的方式,例如列、行或者一个单元格。Introduction of the swing一、 The Swing concept:Layout, models, and eventsLayout: Swing, including many layout, the layout is also a kind, responsible for placement of the pro

35、cessing components in application, as well as the application change size, or delete, add components of processing components accordingly.Events: you need to press a button, click the mouse and the user can do every thing in the UI for the response.Imagine what will happen if you dont response, afte

36、r the user clicks, I have no change.Model: for more advanced components (lists, tables and trees), as well as some easier components, such as JComboBox model is the most effective way to deal with data.They put most of the work of dealing with the data from the actual component itself out (please re

37、call the MVC discussed earlier), and provides a common data object classes (such as the Vector and ArrayList) wrapper.1) simple layoutAs mentioned earlier, the layout of the processing module is put in the application for you.Your first question may be why cant tell what it ought to be in place in p

38、ixel?Yes, you can do that, but the window size, or worse, in some cases, the user to change the screen resolution, or when someone want to try in other operating systems application, you will get into trouble at once.Layout managers to those concerns.Not everyone with the same Settings, so the layou

39、t manager will create relative layout, allows you to specify the component relative to other components put way, decided to change the size of the way.This is the good part: easier than it sounds.As long as the call setLayout (yourLayout) sets the layout manager.In the face of the add () after the i

40、nvocation of the components can be added to the container, and let the layout manager is responsible for put it should be.Now contains a large number of layout in the Swing;Looks like each release will have a new layout for different purposes.However, some layout has been tested, and will exist fore

41、ver, I mean forever - because the Java languages first release in 1995, there is the layout.The layout is: FlowLayout, GridLayout and BorderLayout.FlowLayout components arranged from left to right.When the space is insufficient, will move to the next line.It is to use the most simple layout, therefo

42、re, is also the most weak ability of layout:SetLayout (new FlowLayout ();Add (new JButton ( for );Add (new JButton ( Button2 );Add (new JButton ( Button3 ); FlowLayout instanceGridLayout as you might imagine working: it allows you to specify the number of rows and columns, and then add the component

43、 when put the components in the cell:SetLayout (new GridLayout (1, 2);Add (new JButton ( for );Add (new JButton ( Button2 );Add (new JButton ( Button3 ); GridLayout instanceEven if the Swing added many new layout manager, BorderLayout is still one very useful.Even experienced UI developers often use

44、 BorderLayout.It USES the concept of east, south, west, north, place components on the screen:SetLayout (new BorderLayout ();Add (new JButton ( for ), North);Add (new JButton ( Button2 ), Center);Add (new JButton ( Button3 ), West);GridBagLayout instanceAlthough the above example for simple layout i

45、s very good, but more advanced UI need the layout of the more senior manager.This is where the GridBagLayout function.Unfortunately, confusing, extremely difficult when using it, everyone who have used it will agree to this.I am not against;But in addition to its difficulties, it may be to use Swing

46、 built-in layout manager to create the best way to beautiful UI.2) eventsFinally, we came to the most important part of the Swing: handle events, responding to the UI interaction.The Swing handle events using the event/listener model.This model works: allows a class to register on a component of an

47、event.This class of registration to the event is called a listener, because it is waiting for component events, and in the event occurs, take action.Components themselves know how to activate event (i.e., know it will generate the type of interaction, and how to make the listener knows when the interaction occurs).Components and contains information about the interaction of events and classes for interactive communication.The technical aspects of talk aside, lets take a look at a few Sw

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁