




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA教程 第五讲 AWT图形用户界面设计5.1 用AWT生成图形化用户界面 抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立图形用户界面GUI (Graphics User Interface)工具集,AWT可用于Java的applet和applications中。它支持图形用户界面编程的功能包括: 用户界面组件;事件处理模型;图形和图像工具,包括形状、颜色和字体类;布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率无关;数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴。5.1.1 Java.awt包Java.awt包中提供了GUI设计所使用的类和接口,可从图5.1中看到主要类之间的关系。 java.awt包提供了基本的Java程序的GUI设计工具。主要包括下述三个概念:组件-Component容器-Container布局管理器-LayoutManager5.1.2 组件和容器Java的图形用户界面的最基本组成部分是组件(Component),组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。类Java.awt.Component是许多组件类的父类,Component类中封装了组件通用的方法和属性,如图形的组件对象、大小、显示位置、前景色和背景色、边界、可见性等,因此许多组件类也就继承了Component类的成员方法和成员变量,相应的成员方法包括:getComponentAt(int x, int y)getFont()getForeground()getName()getSize()paint(Graphics g)repaint()update()setVisible(boolean b)setSize(Dimension d)setName(String name)等容器(Container)也是一个类,实际上是Component的子类,因此容器本身也是一个组件,具有组件的所有性质,但是它的主要功能是容纳其它组件和容器。布局管理器(LayoutManager):每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。为了使我们生成的图形用户界面具有良好的平台无关性,Java语言中,提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。在程序中安排组件的位置和大小时,应该注意以下两点:1容器中的布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件的这些属性。如果试图使用Java 语言提供的setLocation(),setSize(),setBounds() 等方法,则都会被布局管理器覆盖。 2如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为:setLayout(null); 5.1.3 常用容器容器Java.awt.Container是Component的子类,一个容器可以容纳多个组件,并使它们成为一个整体。容器可以简化图形化界面的设计,以整体结构来布置界面。所有的容器都可以通过add()方法向容器中添加组件。有三种类型的容器:Window、Panel、ScrollPane,常用的有Panel, Frame, Applet。1Frame以下是容器的例子:例51import Java.awt.*;public class MyFrame extends Framepublic static void main(String args )MyFrame fr = new MyFrame(Hello Out There!); /构造方法fr.setSize(200,200); /设置Frame的大小,缺省为(0,0)fr.setBackground(Color.red); /设置Frame的背景,缺省为红色fr.setVisible(true); /设置Frame为可见,缺省为不可见public MyFrame (String str)super(str); /调用父类的构造方法查看运行结果一般我们要生成一个窗口,通常是用Window的子类Frame来进行实例化,而不是直接用到Window类。Frame的外观就像我们平常在windows系统下见到的窗口,有标题、边框、菜单、大小等等。每个Frame的对象实例化以后,都是没有大小和不可见的,因此必须调用setSize( )来设置大小,调用setVisible(true)来设置该窗口为可见的。另外,AWT在实际的运行过程中是调用所在平台的图形系统,因此同样一段AWT程序在不同的操作系统平台下运行所看到的图形系统是不一样的。例如在windows下运行,则显示的窗口是windows风格的窗口;而在UNIX下运行时,则显示的是UNIX风格的窗口。2. Panel例52import Java.awt.*;public class FrameWithPanel extends Framepublic FrameWithPanel(String str)super(str); public static void main(String args)FrameWithPanel fr = new FrameWithPanel(Frame with Panel);Panel pan=new Panel();fr.setSize(200,200);fr.setBackground(Color.red); /框架fr的背景颜色设置为红色fr.setLayout(null); /取消布局管理器pan.setSize(100,100);pan.setBackground(Color.yellow); /设置面板pan的背景颜色为黄色fr.add(pan); /用add方法把面板pan添加到框架fr中fr.setVisible(true); 查看运行结果一般我们要生成一个窗口,通常是用Window的子类Frame来进行实例化,而不是直接用到Window类。Frame的外观就像我们平常在windows系统下见到的窗口,有标题、边框、菜单、大小等等。每个Frame的对象实例化以后,都是没有大小和不可见的,因此必须调用setSize( )来设置大小,调用setVisible(true)来设置该窗口为可见的。另外,AWT在实际的运行过程中是调用所在平台的图形系统,因此同样一段AWT程序在不同的操作系统平台下运行所看到的图形系统是不一样的。例如在windows下运行,则显示的窗口是windows风格的窗口;而在UNIX下运行时,则显示的是UNIX风格的窗口。5.1.4 LayoutManager 布局管理器(1)java为了实现跨平台的特性并且获得动态的布局效果,Java将容器内的所有组件安排给一个布局管理器负责管理,如:排列顺序,组件的大小、位置,当窗口移动或调整大小后组件如何变化等功能授权给对应的容器布局管理器来管理,不同的布局管理器使用不同算法和策略,容器可以通过选择不同的布局管理器来决定布局。 布局管理器主要包括:FlowLayout,BorderLayout,GridLayout,CardLayout,GridBagLayout例53import Java.awt.*;public class ExGuiprivate Frame f;private Button b1;private Button b2;public static void main(String args)ExGui that = new ExGui();that.go();public void go()f = new Frame(GUI example);f.setLayout(new FlowLayout(); /设置布局管理器为FlowLayoutb1 = new Button(Press Me); /按钮上显示字符Press Meb2 = new Button(Dont Press Me);f.add(b1);f.add(b2);f.pack(); /紧凑排列,其作用相当于setSize(),即让窗口尽量小,小到刚刚能够包容住b1、b2两个按钮f.setVisible(true);查看运行结果1. FlowLayoutFlowLayout 是Panel,Applet的缺省布局管理器。其组件的放置规律是从上到下、从左到右进行放置,如果容器足够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边,如果当前行已放置不下该组件,则放置到下一行的最左边。构造方法主要下面几种:FlowLayout(FlowLayout.RIGHT,20,40);/*第一个参数表示组件的对齐方式,指组件在这一行中的位置是居中对齐、居右对齐还是居左对齐,第二个参数是组件之间的横向间隔,第三个参数是组件之间的纵向间隔,单位是象素。*/FlowLayout(FlowLayout.LEFT); /居左对齐,横向间隔和纵向间隔都是缺省值5个象素FlowLayout(); /缺省的对齐方式居中对齐,横向间隔和纵向间隔都是缺省值5个象素例54import Java.awt.*;public class myButtons public static void main(String args)Frame f = new Frame(); f.setLayout(new FlowLayout();Button button1 = new Button(Ok);Button button2 = new Button(Open);Button button3 = new Button(Close);f.add(button1);f.add(button2);f.add(button3);f.setSize(300,100); f.setVisible(true);查看运行结果当容器的大小发生变化时,用FlowLayout管理的组件会发生变化,其变化规律是:组件的大小不变,但是相对位置会发生变化。例如上图中有三个按钮都处于同一行,但是如果把该窗口变窄,窄到刚好能够放下一个按钮,则第二个按钮将折到第二行,第三个按钮将折到第三行。按钮Open本来在按钮OK的右边,但是现在跑到了下面,所以说组件的大小不变,但是相对位置会发生变化。2. BorderLayoutBorderLayout 是Window,Frame和Dialog的缺省布局管理器。BorderLayout布局管理器把容器分成5个区域:North,South,East,West和Center,每个区域只能放置一个组件。各个区域的位置及大小如下图所示:例55import Java.awt.*;public class buttonDirpublic static void main(String args)Frame f = new Frame(BorderLayout);f.setLayout(new BorderLayout();f.add(North, new Button(North);/第一个参数表示把按钮添加到容器的North区域f.add(South, new Button(South);/第一个参数表示把按钮添加到容器的South区域f.add(East, new Button(East); /第一个参数表示把按钮添加到容器的East区域f.add(West, new Button(West);/第一个参数表示把按钮添加到容器的West区域f.add(Center, new Button(Center);/第一个参数表示把按钮添加到容器的Center区域f.setSize(200,200);f.setVisible(true); 查看运行结果在使用BorderLayout的时候,如果容器的大小发生变化,其变化规律为:组件的相对位置不变,大小发生变化。例如容器变高了,则North、South区域不变,West、Center、East区域变高;如果容器变宽了,West、East区域不变,North、Center、South区域变宽。不一定所有的区域都有组件,如果四周的区域(West、East、North、South区域)没有组件,则由Center区域去补充,但是如果Center区域没有组件,则保持空白,其效果如下几幅图所示:North区域缺少组件North和Center区域缺少组件3. GridLayout使容器中各个组件呈网格状布局,平均占据容器的空间。例56import Java.awt.*;public class ButtonGrid public static void main(String args) Frame f = new Frame(GridLayout);f.setLayout(new GridLayout(3,2); /容器平均分成3行2列共6格f.add(new Button(1); /添加到第一行的第一格f.add(new Button(2); /添加到第一行的下一格f.add(new Button(3); /添加到第二行的第一格f.add(new Button(4); /添加到第二行的下一格f.add(new Button(5); /添加到第三行的第一格f.add(new Button(6); /添加到第三行的下一格f.setSize(200,200);f.setVisible(true);查看运行结果5.1.4 LayoutManager 布局管理器(2) 4. CardLayoutCardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间,它把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件,当然每层都可以利用Panel来实现复杂的用户界面。牌布局管理器(CardLayout)就象一副叠得整整齐齐的扑克牌一样,有54张牌,但是你只能看见最上面的一张牌,每一张牌就相当于牌布局管理器中的每一层。例57import Java.awt.*;import Java.awt.event.*; /事件处理机制,下一节的内容public class ThreePages implements MousListener CardLayout layout=new CardLayout(); /实例化一个牌布局管理器对象Frame f=new Frame(CardLayout);Button page1Button;Label page2Label; /Label是标签,实际上是一行字符串TextArea page3Text; /多行多列的文本区域Button page3Top;Button page3Bottom;public static void main(String args) new ThreePages().go(); Public void go() f.setLayout(layout); /设置为牌布局管理器layoutf.add(page1Button=new Button(Button page),page1Button); /*第二个参数page1Button表示的是你对这层牌所取的名字*/page1Button.addMouseListener(this); /注册监听器f.add(page2Label=new Label(Label page),page2Label);page2Label.addMouseLisener(this); /注册监听器Panel panel=new Panel();panel.setLayout(new BorderLayout();panel.add(page3Text=new TextArea(Composite page),Center);page3Text.addMouseListener(this); panel.add(page3Top=new Button(Top button) , North);page3Top.addMouseListener(this);panel.add(page3Bottom=new Button(Bottom button) ,South);page3Bottom.addMouseListener(this);f.add(panel,panel);f.setSize(200,200);f.setVisible(true);5容器的嵌套在复杂的图形用户界面设计中,为了使布局更加易于管理,具有简洁的整体风格,一个包含了多个组件的容器本身也可以作为一个组件加到另一个容器中去,容器中再添加容器,这样就形成了容器的嵌套。下面是一个容器嵌套的例子。例58import Java.awt.*;public class ExGui3private Frame f;private Panel p;private Button bw,bc;private Button bfile,bhelp;public static void main(String args)ExGui3 gui = new ExGui3();gui.go(); public void go()f = new Frame(GUI example 3);bw=new Button(West);bc=new Button(Work space region);f.add(bw,West);f.add(bc,Center);p = new Panel();f.add(p,North);bfile= new Button(File);bhelp= new Button(Help);p.add(bfile);p.add(bhelp);f.pack();f.setVisible(true);查看运行结果小 结:1Frame是一个顶级窗口。Frame的缺省布局管理器为BorderLayout。2Panel 无法单独显示,必须添加到某个容器中。 Panel 的缺省布局管理器为FlowLayout。3当把Panel 作为一个组件添加到某个容器中后,该Panel 仍然可以有自己的布局管理器。因此,可以利用Panel 使得BorderLayout 中某个区域显示多个组件,达到设计复杂用户界面的目的 。4如果采用无布局管理器 setLayout(null),则必须使用setLocation(),setSize(),setBounds()等方法手工设置组件的大小和位置,此方法会导致平台相关,不鼓励使用。5.2 AWT事件处理模型上一节中的主要内容是如何放置各种组件,使图形界面更加丰富多彩,但是还不能响应用户的任何操作,要能够让图形界面接收用户的操作,就必须给各个组件加上事件处理机制。在事件处理的过程中,主要涉及三类对象: Event-事件,用户对界面操作在Java语言上的描述,以类的形式出现,例如键盘操作对应的事件类是KeyEvent。 Event Source-事件源,事件发生的场所,通常就是各个组件,例如按钮Button。 Event handler-事件处理者,接收事件对象并对其进行处理的对象例如,如果用户用鼠标单击了按钮对象button,则该按钮button就是事件源,而java运行时系统会生成ActionEvent类的对象actionE,该对象中描述了该单击事件发生时的一些信息,然后,事件处理者对象将接收由Java运行时系统传递过来的事件对象actionE并进行相应的处理。由于同一个事件源上可能发生多种事件,因此Java采取了授权处理机制(Delegation Model),事件源可以把在其自身所有可能发生的事件分别授权给不同的事件处理者来处理。比如在Canvas对象上既可能发生鼠标事件,也可能发生键盘事件,该Canvas对象就可以授权给事件处理者一来处理鼠标事件,同时授权给事件处理者二来处理键盘事件。有时也将事件处理者称为监听器,主要原因也在于监听器时刻监听着事件源上所有发生的事件类型,一旦该事件类型与自己所负责处理的事件类型一致,就马上进行处理。授权模型把事件的处理委托给外部的处理实体进行处理,实现了将事件源和监听器分开的机制。事件处理者(监听器)通常是一个类,该类如果要能够处理某种类型的事件,就必须实现与该事件类型相对的接口。例如例5.9中类ButtonHandler之所以能够处理ActionEvent事件,原因在于它实现了与ActionEvent事件对应的接口ActionListener。每个事件类都有一个与之相对应的接口。将事件源对象和事件处理器(事件监听器)分开。如图5.2所示打个不太恰当的比喻,比如说有一位李先生,李先生可能会发生很多法律纠纷,可能是民事法律纠纷,也可能是刑事法律纠纷,那么李先生可以请律师,他可以授权王律师负责帮他打民事法律的官司,同时也可以授权张律师帮他打刑事法律的官司。这个请律师的过程从李先生的角度来看,就是授权的过程,而从王律师和张律师的角度来看,一旦被授权,他们就得时刻对李先生负责,监听着李先生,一旦发生民事纠纷了,王律师就要马上去处理,而一旦发生刑事纠纷了,张律师就要马上进行处理。此时此刻,李先生就是事件源,王律师是一个事件处理者,张律师是另外一个事件处理者,民事纠纷和刑事纠纷就是不同类型的事件。例5.9import Java.awt.*;import Java.awt.event.*;public class TestButton public static void main(String args)Frame f = new Frame(Test);Button b = new Button(Press Me!);b.addActionListener(new ButtonHandler(); /*注册监听器进行授权,该方法的参数是事件处理者对象,要处理的事件类型可以从方法名中看出,例如本方法要授权处理的是ActionEvent,因为方法名是addActionListener。*/f.setLayout(new FlowLayout(); /设置布局管理器f.add(b);f.setSize(200,100);f.setVisible(true);class ButtonHandler implements ActionListener /实现接口ActionListener才能做事件ActionEvent的处理者public void actionPerformed(ActionEvent e) /系统产生的ActionEvent事件对象被当作参数传递给该方法System.out.println(Action occurred); /本接口只有一个方法,因此事件发生时,系统会自动调用本方法,需要做的操作就把代码写在则个方法里。使用授权处理模型进行事件处理的一般方法归纳如下:1对于某种类型的事件XXXEvent, 要想接收并处理这类事件,必须定义相应的事件监听器类,该类需要实现与该事件相对应的接口XXXListener;2事件源实例化以后,必须进行授权,注册该类事件的监听器,使用addXXXListener(XXXListener ) 方法来注册监听器。 5.2.1 事件类与AWT有关的所有事件类都由Java.awt.AWTEvent类派生,它也是EventObject类的子类。AWT事件共有10类,可以归为两大类:低级事件和高级事件。java.util.EventObject类是所有事件对象的基础父类,所有事件都是由它派生出来的。AWT的相关事件继承于Java.awt.AWTEvent类,这些AWT事件分为两大类:低级事件和高级事件,低级事件是指基于组件和容器的事件,当一个组件上发生事件,如:鼠标的进入,点击,拖放等,或组件的窗口开关等,触发了组件事件。高级事件是基于语义的事件,它可以不和特定的动作相关联,而依赖于触发此事件的类,如在TextField中按Enter键会触发ActionEvent事件,滑动滚动条会触发AdjustmentEvent事件,或是选中项目列表的某一条就会触发ItemEvent事件。 低级事件ComponentEvent( 组件事件:组件尺寸的变化,移动) ContainerEvent( 容器事件:组件增加,移动) WindowEvent( 窗口事件:关闭窗口,窗口闭合,图标化) FocusEvent( 焦点事件:焦点的获得和丢失) KeyEvent( 键盘事件:键按下、释放) MouseEvent( 鼠标事件:鼠标单击,移动) 高级事件(语义事件)ActionEvent(动作事件:按钮按下,TextField中按Enter键)AdjustmentEvent(调节事件:在滚动条上移动滑块以调节数值)ItemEvent(项目事件:选择项目,不选择项目改变)TextEvent(文本事件,文本对象改变)5.2.2 事件监听器每类事件都有对应的事件监听器,监听器是接口,根据动作来定义方法。例如,与键盘事件KeyEvent相对应的接口是:public interface KeyListener extends EventListener public void keyPressed(KeyEvent ev);public void keyReleased(KeyEvent ev);public void keyTyped(KeyEvent ev);注意到在本接口中有三个方法,那么Java运行时系统何时调用哪个方法?其实根据这三个方法的方法名就能够知道应该是什么时候调用哪个方法执行了。当键盘刚按下去时,将调用keyPressed( )方法执行,当键盘抬起来时,将调用keyReleased( )方法执行,当键盘敲击一次时,将调用keyTyped( )方法执行。又例如窗口事件接口: public interface WindowListener extends EventListenerpublic void windowClosing(WindowEvent e); /把退出窗口的语句写在本方法中public void windowOpened(WindowEvent e); /窗口打开时调用public void windowIconified(WindowEvent e); /窗口图标化时调用public void windowDeiconified(WindowEvent e); /窗口非图标化时调用public void windowClosed(WindowEvent e);/窗口关闭时调用public void windowActivated(WindowEvent e); /窗口激活时调用public void windowDeactivated(WindowEvent e); /窗口非激活时调用AWT的组件类中提供注册和注销监听器的方法: 注册监听器:public void add (listener); 注销监听器:public void remove (listener);例如Button类:(查API)public class Button extends Component public synchronized void addActionListener(ActionListener l);public synchronized void removeActionListener(ActionListener l);5.2.3 AWT事件及其相应的监听器接口(1)表5.1列出了所有AWT事件及其相应的监听器接口,一共10类事件,11个接口。下面这张表应能牢牢记住。表5.1事件类别描述信息接口名方法ActionEvent激活组件ActionListeneractionPerformed(ActionEvent)ItemEvent选择了某些项目ItemListeneritemStateChanged(ItemEvent)MouseEvent鼠标移动MouseMotionListenermouseDragged(MouseEvent)mouseMoved(MouseEvent)鼠标点击等MouseListenermousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent) mouseClicked(MouseEvent)KeyEvent键盘输入KeyListenerkeyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)FocusEvent组件收到或失去焦点FocusListenerfocusGained(FocusEvent)focusLost(FocusEvent)AdjustmentEvent移动了滚动条等组件AdjustmentListeneradjustmentValueChanged(AdjustmentEvent)ComponentEvent对象移动缩放显示隐藏等ComponentListenercomponentMoved(ComponentEvent)componentHidden(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)WindowEvent窗口收到窗口级事件WindowListenerwindowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)windowDeactivated(WindowEvent) ContainerEvent容器中增加删除了组件ContainerListenercomponentAdded(ContainerEvent)componentRemoved(ContainerEvent) TextEvent文本字段或文本区发生改变TextListenertextValueChanged(TextEvent)5.2.3 AWT事件及其相应的监听器接口(2)例5.10说明事件处理模型的应用。例5.10 import Java.awt.*;import Java.awt.event.*;public class ThreeListener implements MouseMotionListener,MouseListener,WindowListener /实现了三个接口private Frame f;private TextField tf; public static void main(String args)ThreeListener two = new ThreeListener();two.go(); public void go() f = new Frame(Three listeners example); f.add(new Label(Click and drag the mouse),North);tf = new TextField(30);f.add(tf,South); /使用缺省的布局管理器f.addMouseMotionListener(this); /注册监听器MouseMotionListenerf.addMouseListener(this); /注册监听器MouseListenerf.addWindowListener(this); /注册监听器WindowListenerf.setSize(300,200);f.setVisible(true); public void mouseDragged (MouseEvent e) /实现mouseDragged方法String s = Mouse dragging : X=+e.getX()+Y = +e.getY();tf.setText(s);public void mouseMoved(MouseEvent e) /对其不感兴趣的方法可以方法体为空public void mouseClicked(MouseEvent e)public void mouseEntered(MouseEvent e)String s = The mouse entered;tf.setText(s);public void mouseExited(MouseEvent e)String s = The mouse has left the building;tf.setText(s); public void mousePressed(MouseEvent e)public void mouseReleased(MouseEvent e) public void windowClosing(WindowEvent e) /为了使窗口能正常关闭,程序正常退出,需要实现windowClosing方法System.exit(1);public void windowOpened(WindowEvent e) /对其不感兴趣的方法可以方法体为空public void windowIconified(WindowEvent e) public void windowDeiconified(WindowEvent e) public void windowClosed(WindowEvent e) public void windowActivated(WindowEvent e) public void windowDeactivated(WindowEvent e) 上例中有如下几个特点:1可以声明多个接口,接口之间用逗号隔开。implements MouseMotionListener, MouseListener, WindowListener;2可以由同一个对象监听一个事件源上发生的多种事件:f.addMouseMotionListener(this);f.addMouseListener(this);f.addWindowListener(this);则对象f 上发生的多个事件都将被同一个监听器接收和处理。3事件处理者和事件源处在同一个类中。本例中事件源是Frame f,事件处理者是类ThreeListener,其中事件源Frame f是类ThreeListene
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 超声报告书写培训
- 九年级历史上册 第六单元 第17课 英国工业革命教学设计 华东师大版
- 初中校本研修培训
- 2025年全球电力评论报告(英文版)-EMBER
- 人教统编版必修 上册第六单元10(劝学 师说)10.2 师说第二课时教案
- 人教部编版七年级下册登幽州台歌教案设计
- 内蒙古鄂尔多斯市东胜区第一中学九年级化学上册 第四单元 课题2 水的净化教学设计 (新版)新人教版
- 2024中智天津人力资源服务有限公司基础招聘2人笔试参考题库附带答案详解
- 七年级数学上册 第5章 相交线与平行线5.1相交线 3同位角、内错角、同旁内角教学设计 (新版)华东师大版
- 感控管理培训
- 新风系统的施工组织方案
- 义务教育英语课程标准(2022年版) (1)
- 工程项目内部控制流程图表
- 百家姓全文带拼音打印版本
- 强夯试夯报告(共12页)
- 关于电商平台对入驻经营者的审核要求或规范文件
- 骨优导介绍PPT
- 道场迎请亡魂开五方科仪
- 毕业设计(论文)-四自由度工业机械手的设计
- 八下数学19.1.1-第1课时-常量与变量ppt课件
- 用Polyphen2和SIFT进行突变预测
评论
0/150
提交评论