




已阅读5页,还剩78页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA语言,第10讲JAVA的图形用户界面设计,2020/4/29,.,上一讲回顾,输入/输出流的概念和类层次结构字节流、字符流的定义和使用节点流与过滤流的定义和使用文件管理以及文件操作对象串行化的概念和实现方法,2020/4/29,.,学习要点,了解AWT和Swing组件的基础知识理解如何创建框架窗口理解如何向框架窗口添加组件使用各种布局管理器创建复杂的窗口理解Java的事件处理机制创建GUI对象,以及各GUI对象的事件处理,2020/4/29,.,4,GraphicsUserInterface,GUI-GraphicsUserInterface。GUI程序给用户提供了一个视觉上更加直观,操作更加方便、快捷的用户环境。在Java中为方便GUI程序的开发,专门提供多种进行图形用户程序开发的程序包。如抽象窗口工具包AWT和Swing等。,2020/4/29,.,5,10.1GUI类,Java提供了帮助创建图形用户界面程序的丰富的类库:容器类:JFrame,JPanel,JAppletUI组件类:JButton,JTextField,JComboBox,JList,JMenu等帮助类:Graphics,Color,Font,Demision,LayoutManager等,2020/4/29,.,用这些类库中的类(框架、面板、标签、按钮、文本框、组合框、复选按钮、菜单、滚动条等)构造用户界面,这些类又称为GUI类。GUI类存放在java.awt和javax.swing包中,编程时需要导入。importjava.awt.*;或importjavax.swing.*;,2020/4/29,.,设计GUI应用程序的流程:(1)引用需要的包和类。(2)设置一个顶层的容器。(3)根据需要为容器设置布局管理器或使用默认布局管理器。(4)将组件添加到容器内,位置自行设计。(5)为响应事件的组件编写事件处理代码。,2020/4/29,.,10.2框架,创建图形用户界面程序的第一步是创建一个容器类,以容纳其他要显示的组件主界面(框架)。在这个容器中放入其他一些图形用户界面组件从而组成一个功能完善的程序。在Java程序中可用于主界面的类主要有两个:简单窗口类JWindow框架窗口类JFrame类,2020/4/29,.,JFrame,.,Contentpane,JPanel,JPanel,JButton,JLabel,中间层容器,Swing件组层次关系,顶层容器,2020/4/29,.,10.2.1创建框架,JFrameSwing应用程序的窗口组件类,是Swing中最常使用的容器组件,可以添加其它容器和添加其它组件JFrame类构造方法:publicJFrame()publicJFrame(StringTitle)JFrame类常用方法:publicContainergetContentPane()publicvoidsetDefaultCloseOperation(intoperation),2020/4/29,.,方法setDefaultCloseOperation(intoperation)的参数operation取以下4个常量之一:DO_NOTHING_ON_CLOSEHIDE_ON_CLOSE(默认)DISPOSE_ON_CLOSEEXIT_ON_CLOSE,2020/4/29,.,JFrame类常用方法(2),setIconImage窗口最小化。setTitle设置窗口中标题栏的文字。setResizable设置用户是否可以改变框架大小。dispose方法关闭窗口,并回收该窗口的所有资源。setLocation设置组件的位置。setBounds重新设置组件的大小和位置。setVisible设置框架是否可视,2020/4/29,.,【例10.1】显示一个空框架FirstFrame.javaimportjavax.swing.*;publicclassFirstFramepublicstaticvoidmain(Stringargs)SimpleFrameframe=newSimpleFrame();/设置用户关闭框架时的响应动作frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/显示该框架frame.show();classSimpleFrameextendsJFramepublicSimpleFrame()/设置框架大小setSize(WIDTH,HEIGHT);publicstaticfinalintWIDTH=300;publicstaticfinalintHEIGHT=200;,运行结果,2020/4/29,.,ch10TestFrame.java,2020/4/29,.,容器的分类,1、容器(Container类)容器通过使用一些设计管理器,主要负责布置它所包含的组件的位置。Container类允许别的Component对象嵌套在的Container类对象中。2、顶层容器JFrame:一个使用Swing的独立图形用户界面应用程序至少有一个使用JFrame作为根的包含层次JApplet:基于Swing的Applet至少有一个包含层次,其根是JApplet3、中间层容器,2020/4/29,.,10.2.2在框架内添加组件,如果需要将一些图形用户界面元素加入到框架中,则要在面板组件(JPanel)中进行绘制,然后将该面板组件加入到框架的内容窗格(ContentPane)中:/得到JFrame的内容窗格对象ContainercontentPane=getContentPane();Componentc=.;/将组件加入到内容窗格中contentPane.add(c);面板JPanel类本身是容器,它可以容纳其他图形用户界面元素,如按钮、菜单等。,2020/4/29,.,/TestFrame.java,classSimpleFrameextendsJFramepublicstaticfinalintWIDTH=300;publicstaticfinalintHEIGHT=200;publicSimpleFrame(Stringtitle)super(title);/设置框架大小setSize(WIDTH,HEIGHT);JButtonbtnOk=newJButton(确定);getContentPane().add(btnOk);,2020/4/29,.,10.3布局管理,为了使图形用户界面具有良好的平台无关性,提供了专门用来管理组件在容器中的布局的工具。Java的GUI组件被放置在容器中,然后由容器的布局管理器对它们的位置和大小进行管理。在程序中,如果没有指定布局管理器,默认的布局管理器就将组件其放置到框架的中央。,2020/4/29,.,Java共有6种基本的布局管理器,它们分别为:FlowLayout(流式布局)GridLayout(网格布局)BorderLayout(边界布局)CardLayout(卡片布局)GridBagLayout(网格包布局)null(空布局)。容器类默认的布局管理器为FlowLayout。,2020/4/29,.,10.3.1FlowLayout布局管理器,组件从左上角开始按从左到右、从上到下的方式排列FlowLayout的构造函数:FlowLayout():生成一个默认的流式布局FlowLayout(intalignment):可以设定每一行组件的对齐方式FlowLayout(intalignment,inthorz,intvert):可以设定组件间的水平和垂直距离Applet和面板的缺省布局:,FlowLayoutmylayout=newFlowLayout();FlowLayoutexLayout=newFlowLayout(FlowLayout.RIGHT);setLayout(exlayout);/为容器设置新布局ContainercontentPane=getContentPane();/增加相应的按钮for(inti=0;ibuttons;i+)JButtonaddButton=newJButton(add+i);contentPane.add(addButton);,2020/4/29,.,ch10TestLayoutFrame.java,2020/4/29,.,10.3.2GridLayout布局管理器,GridLayout的构造函数:-GridLayout():生成一个单列的网格布局-GridLayout(introw,intcol):生成一个指定行数和列数的网格布局,水平和垂直间距为0-GridLayout(introw,intcol,inthorz,intvert):生成一个指定行数和列数的网格布局及组件的水平和垂直间隔。用于将容器区域划分为一个矩形网格组件按行和列排列,.Buttonbtn;/声明按钮数组Stringstr=1,2,3,4,5,6,7,8,9;setLayout(newGridLayout(3,3);btn=newButtonstr.length;/创建按钮数组for(inti=0;istr.length;i+)btni=newButton(stri);add(btni);,2020/4/29,.,ch10TestGridLayout.java,2020/4/29,.,10.3.3BorderLayout布局管理器,BorderLayout的构造函数:-BorderLayout():生成默认的边界布局-BorderLayout(inthorz,intvert):可以设定组件间的水平和垂直距离窗口、框架和对话框等的缺省布局组件被置于容器的北、南、东、西或中间位置,.setLayout(newBorderLayout();ButtonbtnEast=newButton(东);ButtonbtnWest=newButton(西);ButtonbtnNorth=newButton(北);ButtonbtnSouth=newButton(南);ButtonbtnCenter=newButton(中);add(btnEast,BorderLayout.EAST);add(btnWest,BorderLayout.WEST);add(btnNorth,BorderLayout.NORTH);add(btnSouth,BorderLayout.SOUTH);add(btnCenter,BorderLayout.CENTER);,2020/4/29,.,ch10TestBorderLayout.java,2020/4/29,.,10.3.4CardLayout布局管理器,可存储几个不同的布局。每个布局就像是一个卡片组中的一张卡片。在一个给定的时间总会有一张卡片在顶层。卡片通常为一个JPanel对象。每当需要许多面板切换,而每个面板需要显示为不同布局时,可以使用卡片布局。,2020/4/29,.,CardLayout提供了两种构造函数:CardLayout()CardLayout(inthorz,intvert)第一种形式生成了一个默认的卡片布局管理器。第二种形式分别在horz和vert中设定控件之间的水平和垂直间隔。,2020/4/29,.,主要方法,voidadd(ComponentpanelObj,Objectname);在生成一副牌之后,通过调用由CardLayout定义的下列方法之一来激活一张卡片:voidfirst(Containerdeck)voidlast(Containerdeck)voidnext(Containerdeck)voidprevious(Containerdeck)voidshow(Containerdeck,StringcardName)演示TestCardLayout.java,2020/4/29,.,10.3.5GridBagLayout布局管理器,每个GridBagLayout对象维持一个动态的矩形单元网格,每个组件占用一个或多个这样的单元,称为显示区域。构造函数:GridBagLayout()使用GridBagLayout和GridBagConstaints辅助类GridBagLayout管理的每个组件都与GridBagConstaints对象关联,2020/4/29,.,GridBagConstraints类中包含用来定位及调整组件大小所需的全部信息。组件大小不必相同组件按行和列排列放置顺序不一定为从左至右和由上至下获得GridBagLayout:GridBagLayoutgb=newGridBagLayout();ContainerName.setLayout(gb);要使用此布局,必须提供各组件的大小和布局等信息。,2020/4/29,.,GridBagConstraints类2-1,成员变量列表:gridx,gridy:指定组件放置于哪个单元中gridwidth,gridheight:指定组件将占用多少行和多少列weightx,weighty:指定在一个GridBagLayout中应如何分配空间,这些变量的缺省值为0ipadx,ipady:指定组件的最小高度和宽度,2020/4/29,.,成员变量列表:fill:指定在单元大于组件的情况下,组件如何填充此单元,共有4可选值。缺省值为:GridBagConstraints.NONEanchor:指定将组件放置在单元中的位置,共有9个可选值。缺省值为:GridBagConstraints.CENTER,GridBagConstraints类2-2,2020/4/29,.,这十个组件的每一个都将与其相关的GridBagConstraints对象的fill字段设置为GridBagConstraints.BOTH。此外,这些组件还有以下非默认值约束(Constraints):Button1、Button2、Button3:weightx=1.0Button4:weightx=1.0、gridwidth=GridBagConstraints.REMAINDERButton5:gridwidth=GridBagConstraints.REMAINDERButton6:gridwidth=GridBagConstraints.RELATIVEButton7:gridwidth=GridBagConstraints.REMAINDERButton8:gridheight=2、weighty=1.0Button9、Button10:gridwidth=GridBagConstraints.REMAINDER,2020/4/29,.,创建复杂界面TestGridBagLayout.java,2020/4/29,.,10.3.6Null布局管理器,在某些情况下,用户不想使用布局管理器,需要自己设置组件的位置和大小,这时应取消容器的布局管理器,然后再进行设置,否则用户自定义设置将会被布局管理器覆盖。取消布局管理器的方法是:setLayout(null);,2020/4/29,.,用户使用setLocation()、setSize()、setBounds()等方法为组件设置位置和大小。需要注意的是,这种方法会导致程序与系统相关,如不同的分辨率会产生不同的效果。TestNULLLayout.java,2020/4/29,.,10.4面板容器,一个面板实质上是一个“窗口内的窗口”。它是能够被放入其他容器中的容器。面板通常用来简化创建复杂的图形用户界面的过程。例如,我们要在一个框架窗口中放置16个按钮,和一个文本框。,2020/4/29,.,JPanel主要用于放置Swing轻量级组件,不能独立显示,JPanel的对象可以作为顶层容器的内容面板来使用。JPanel类构造方法:publicJPanel()publicJPanel(LayoutManagerlayout)示例JPanelDemo.java,2020/4/29,.,创建面板及复杂布局,参见JPanelDemo.java,2020/4/29,.,10.5事件,目前为止,所有程序都是面向对象的,但是都是以过程化次序执行的。使用了判断和循环语句控制执行流,即程序规定了执行流。JavaGUI编程是事件驱动的。在事件驱动编程中,当事件发生点击按钮,或者鼠标移动时执行代码。本节介绍Java的事件模型。,2020/4/29,.,10.5.1事件和事件源,事件与事件处理:事件处理的3要素:事件源:产生事件的组件事件(对象):用户对组件的操作所触发的事件对象事件监听器:负责处理事件的对象,也可称为事件处理器Java的事件类和监听器接口大多在java.awt.event包中,一些Swing组件所特有的事件监听器接口则在javax.swing.event中声明,2020/4/29,.,事件层次结构2-1,2020/4/29,.,事件层次结构2-2,2020/4/29,.,10.5.2事件监听,Java最新的事件处理方法是基于授权事件模型当事件来源对象因用户的操作(鼠标或键盘),系统会自动触发此事件类对象E,并通知所授权的事件监听者A(若来源对象已向A注册),事件监听者A中有处理各种事件的方法(事件处理者1n)便会处理此事件E的各种状况。,2020/4/29,.,授权事件模型:组件(事件源)都不处理自己的事件,而是将事件处理委托给外部的处理实体(监听器),这种事件处理模型称为事件的授权处理模型。不同的事件,可以交由不同类型的监听器去处理采用授权事件模型进行事件处理的一般步骤为:第一确定EventSource,知道什么组件要被处理第二确定Event,知道什么样的事件要被处理第三实现EventListener,即编写实现EventListener的事件处理代码第四将事件监听器对象与事件源的某种事件关联起来将事件监听器对象与事件源的某种事件关联起来,这个关联的过程称为向事件源注册(Registering)事件监听器。在一个监听器类中可以实现多个监听器接口,通过它可以同时监听同一个事件源上发生的多种事件,同时,通过事件可以获得事件的详细信息,2020/4/29,.,授权事件模型-模型图,授权事件模型图,2020/4/29,.,10.5.3事件处理方法一,1.首先给组件注册监听器,使用下列方法:addxxxListener(事件监听器对象);2.实现事件,重写接口中的方法。publicvoidactionPerformed(ActionEvente)publicvoidkeyPressed(KeyEvente),DynamicButtonDemo.java,2020/4/29,.,事件处理方法二,1。定义事件类,且要实现listenerinterface接口。privateclassColorActionimplementsActionListener2。注册事件类,并给他们发送eventobjectColorActionredAction=newColorAction(Color.RED);yellowButton.addActionListener(yellowAction);,2020/4/29,.,使用实现事件监听器接口的方法处理事件时,必须重写监听器接口中的所有方法,尽管有些方法不会用到。JDK1.1为某些监听器接口提供了适配器类(XXXAdapter),当需要对某种事件进行处理时,只需让事件处理类继承事件所对应的适配器类,只重写需要关注的方法即可,而无关的方法就不必实现了。继承事件适配器类,只需要重写所需要的方法即可。适配器是一个类而不是接口,因而处理事件的类只能继承一个适配器。当该类需要处理多种事件时,通过继承适配器类的方式是不行的。但可以基于适配器类,用内嵌类(InnerClass)的方法来处理这种情况。,addKeyListener(newCharType();为事件源注册事件监听器的方法同上。publicclassCharTypeextendsKeyAdapterpublicvoidkeyPressed(KeyEvente)/大括号中为处理事件的代码,事件处理方法二-事件适配器,2020/4/29,.,例子:ch10CallByKey.javach10ButtonTest.javach10KeyEventDemo.java,2020/4/29,.,10.6用户界面对象(UI),许多Java的编译器提供了可视化地创建图形用户界面。,2020/4/29,.,10.6.1常用容器组件,JPanel组件是一个中间容器,用于将小型的轻量级组件组合在一起JPanel的缺省布局为FlowLayout,2020/4/29,.,10.6.1常用容器组件3-3,容器JApplet继承自Applet类,与Applet不同的是,它默认的布局管理器是JAppletBorderLayout,而Applet默认的布局管理器是FlowLayout。可直接向Applet窗口中添加组件,但JApplet添加组件时必须添加到其内容窗格中。得到内容窗格使用方法:getContentPane();,2020/4/29,.,10.6.2标签(JLabel),既可以显示文本也可以显示图像构造函数如下:JLabel(Iconicon):icon表示使用的图标JLabel(Stringtext,Iconicon,intalign):align表示水平对齐方式,其值可以为:LEFT、RIGHT、CENTER。其它常用方法getText()setText(Stringtext),2020/4/29,.,10.6.3按钮(JButton),可以使用以下任一构造函数来创建按钮:JButton():新建一个空的按钮JButton(Iconicon)JButton(Stringtext)JButton(Stringtext,Iconicon),JButtonbtnOk=newJButton(确定!);JButtonbtnCancel=newJButton(取消!);getContentPane.add(btnOk);getContentPane.add(btnCancel);,2020/4/29,.,10.6.4文本框-JTextField,JTextField组件允许输入或编辑单行文本此类的构造函数包括:JTextField()JTextField(Documentdoc,Stringtext,intcolumns)JTextField(intcolumns)JTextField(Stringtext)JTextField(Stringtext,intcolumns),Containercon=getContentPane();con.setLayout(newFlowLayout();JLabeljl=newJLabel(“文本域”);con.add(jl);JTextFieldtf=newJTextField(20);con.add(tf);,2020/4/29,.,Ch10/ButtonDemo.java,2020/4/29,.,10.6.4文本框-JPasswordField,JPasswordField组件允许输入或编辑单行文本,并且文本被其他字符代替。此类的构造函数与单行文本框类似。其它方法:chargetPassword()chargetEchoChar()voidsetEchoChar(charc),2020/4/29,.,Ch10/DemoPassword.java,2020/4/29,.,10.6.4文本框-JTextArea,JTextArea组件用于接受来自用户的多行文本,可实现可滚动界面JTextArea组件可使用下列构造函数创建:JTextArea()JTextArea(introws,intcols)JTextArea(Stringtext)JTextArea(Stringtext,introws,intcols),JLabeljl=newJLabel(“文本区”);con.add(jl);JTextAreata=newJTextArea(5,10);con.add(ta);,2020/4/29,.,10.6.5复选框-JCheckBox,复选框用于为用户提供一组选项JCheckBox类具有下列构造函数:JCheckBox()JCheckBox(Iconicon)JCheckBox(Iconicon,booleanselected)JCheckBox(Stringtext)JCheckBox(Stringtext,booleanselected)JCheckBox(Stringtext,Iconicon)JCheckBox(Stringtext,Iconicon,booleanselected),2020/4/29,.,ch10JCheckBoxDemo.java,2020/4/29,.,10.6.6单选按钮-JRadioButton,单选按钮允许用户从多个选项中选择其中一个ButtonGroup用于在Swing中创建组JRadioButton对象可使用下列构造函数创建:JRadioButton()JRadioButton(Iconicon)JRadioButton(Icon,booleanselected)JRadioButton(Stringtext)JRadioButton(Stringtext,booleanselected)JRadioButton(Stringtext,Iconicon)JRadioButton(Stringtext,Iconicon,booleanselected),2020/4/29,.,ch10CheckAndRaidoDemo.java,2020/4/29,.,10.6.7列表框-JList,publicJList()publicJList(ListModeldataModel)publicJList(ObjectlistData)JList不支持滚动。要启用滚动,可使用下列代码:JScrollPanemyScrollPane=newJScrollPane();myScrollPane.getViewport().setView(dataList);,Stringstars=安东尼奥.班德拉斯,来昂纳多.迪卡普尼奥,桑德拉.布洛克,休.格兰特,朱莉亚.罗伯茨;JListmoviestars=newJList(stars);,2020/4/29,.,10.6.8组合框-JComboBox,文本域和下拉列表的组合在Swing中,组合框由JComboBox表示构造函数如下:publicJComboBox():此构造函数使用缺省数据模型创建JComboBoxpublicJComboBox(ComboBoxModelasModel):使用现有ComboBoxModel中的项目的组合框publicJComboBox(Objectitems):包含指定数组元素的组合框,Stringnames=弗雷德里克.福西斯,约翰.克里沙姆,玛丽.希金斯.克拉克,帕特丽夏.康威尔;JComboBoxauthors=newJComboBox(names);,2020/4/29,.,ch10ComboDemo.java,2020/4/29,.,10.6.9菜单以及弹出式菜单,典型的菜单:Swing菜单由菜单栏、菜单和菜单项构成。,2020/4/29,.,10.6.9菜单3-2,JMenuBar是可通过JFrame的根窗格添加至容器的组件。由多个JMenu组成,每个JMenu在JMenuBar中都表示为字符串。JMenu在JMenuBar下以文本字符串形式显示,而在用户单击它时,则以弹出式菜单显示。JMenuItem为JMenu中的一个组件,以文本字符串形式显示,可以具有图标,外观可以修改,如字体、颜色、背景、边框等。,2020/4/29,.,1创建菜单步骤,(a)创建菜单栏,并将菜单栏加入到框架中。JMenuBarmenuBar=newJMenuBar();setJMenuBar(menuBar);(b)创建“File”菜单、“Edit”菜单和“View”菜单。JMenufileMenu=newJMenu(File);JMenueditMenu=newJMenu(Edit);JMenuviewMenu=newJMenu(View);JMenuoptionMenu=newJMenu(Option);(c)创建子菜单。JMenuItempasteItem=newJMenuItem(Paste,P);,2020/4/29,.,(d)将菜单项加入到子菜单或菜单中,将子菜单加入到菜单中,将菜单加入到菜单栏中。fileMenu.add(newItem);editMenu.add(pasteItem);viewMenu.add(optionMenu);menuBar.add(fileMenu);menuBar.add(editMenu);menuBar.add(viewMenu);,2020/4/29,.,2创建复选框和单选按钮菜单项,创建单选按钮菜单项“Forward”,并将“Forward”菜单项加入到“Search”菜单中。ButtonGroupgroup=newButtonGroup();forwardItem=newJRadioButtonMenuItem(Forward);group.add(forwardItem);searchMenu.add(forwardItem);创建复选框菜单项“ToolBar”,并加入到子菜单中。JCheckBoxMenuItemtoolItem=newJCheckBoxMenuItem(ToolBar);optionMenu.add(toolItem);,2020/4/29,.,3菜单项的使用状态/初始设置“Save”菜单项为禁用状态。saveItem.setEnabled(false);4快捷键和加速器快捷键显示为带有下划线的字母,加速器则显示为菜单项旁边的组合键。/设置菜单的快捷键。fileMenu.setMnemonic(F);/设置“Exit”菜单项的快捷键为“T”。JMenuItemexitItem=newJMenuItem(Exit,T);/设置“Exit”菜单项的加速器为“CtrlT”。exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,InputEvent.CTRL_MASK);,2020/4/29,.,5弹出式菜
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度不锈钢材料生产设备维修保养合同
- 二零二五年度建筑水电工程税收筹划合同书
- 二零二五年度市政道路照明工程施工合同费支付条款
- 二零二五年度专业维修技师个人劳务用工协议
- 二零二五年度物联网设备合作分成与智能解决方案协议
- 2025版知识产权担保合同担保期限及侵权赔偿条款
- 2025版机场候机楼电气安装工程合同
- 2025年数据中心机房迁移与设备调优服务合同
- 二零二五年工业自动化设备采购协议
- 二零二五年度国际货物仓储合同范本
- GB/T 19418-2003钢的弧焊接头缺陷质量分级指南
- GA/T 992-2012停车库(场)出入口控制设备技术要求
- GA/T 828-2009电子物证软件功能检验技术规范
- 中耳疾病(分泌性中耳炎、急慢性中耳炎)
- 20XX贵州省高职(专科)分类真习题卷
- MRB制程培训教材课件
- 压缩机基础工程施工方案
- 起重机械安全防护装置课件
- 共价有机骨架材料COFs教学讲义课件
- 安全手册(中英文版)
- 儿童悬吊训练系统使用手册(图)
评论
0/150
提交评论