




已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第22章 使用AWT控件、布局管理器和菜单本章继续介绍抽象窗口工具包(AWT)。在这里我们将要学习Java定义的标准控件和布局管理器,讨论菜单和菜单栏,以及两个高级组件:对话框和文件对话框。同时,还要介绍事件处理。控件(controls)是允许用户同你的应用程序用各种方式进行交互的组件,例如,一个常用的控件是下压式按钮。布局管理器自动安排组件在容器中的位置。这样,窗口的外观就可以由它所包含的控件来决定,并可以通过布局管理器来排放各个控件。除了这些控件以外,框架窗口也能包含一个标准形式的菜单栏。每进入一个菜单栏就会激发一个下拉式菜单选项,用户可以从中选择。菜单栏总是位于窗口的顶部。虽然外观不同,但菜单栏与其他控件的处理方式是大致相同的。虽然手工定位窗口中的组件是可能的,但做起来十分枯燥。布局管理器会自动完成此项任务。本章的第一节将介绍各种不同的控件,在这里将用到默认的布局管理器,该管理器使用从左到右、从上到下的方式来组织容器里的控件。一旦控件被覆盖,布局管理器将被检查。通过学习你将了解如何更好的管理控件的位置。22.1 基 本 控 件AWT支持下列类型的控件: 标签 下压式按钮 复选框 选择列表 列表框 滚动条 文本框这些控件是Component的子类。22.1.1 增加和删除控件为了在窗口中包含一个控件,你必须将它加入窗口。实际上,你必须首先生成所需控件的实例,然后通过调用add()方法将它加入到窗口中,此方法是在Container类中定义的。Add()方法有几种形式。下面这种形式是本章前面部分所用到的:Component add(Component compObj)在这里,参数compObj是你将要加入的控件的一个实例,执行以上语句后一个compObj对象的引用被返回。一旦一个控件被加入,无论何时,只要父窗口被显示,它都会自动显示出来。有时,当控件不再需要时,需要将它从窗口中删除。为此,你可以调用remove()方法。这个方法也是在Container类中定义的,如下所示:void remove(Component obj)在这里,参数obj是一个对你想要删除的控件的引用。你可以通过调用removeAll()方法删除所有的控件。22.1.2 对控件的响应除了标签这种被动的控件之外,所有的控件被用户访问时都会产生事件。例如,当用户点击按钮时,一个与下压式按钮有关的相应事件就被送出。一般来说,你的程序只需简单地实现相应的接口,并为每个你要监听的控件注册一个事件监听器。在第20章中我们介绍过,一旦一个事件监听器被安装,相应的事件就会被自动地发送给它。在下面几节中,对每一个控件都指定了相应的接口。22.2 标 签使用起来最简单的控件是标签。标签是Label类的对象,它包含了要显示的字符串。标签是被动的控件,不支持与用户的交互。Label类定义了以下的构造函数:Label()Label(String str)Label(String str, int how)第一种形式生成一个空白标签;第二种形式生成一个包含由参数str所设定的字符串的标签,这个字符串是左对齐的;第三种形式生成一个包含由参数str所设定的字符串的标签,并由整数how决定了对齐方式。How的值必须为以下常量之一:Label.LEFT,Label.RIGHT或Label.CENTER。你能通过使用setText()方法来设定或改变标签中的文本。通过调用getText()方法,你可以获得当前的标签。这些方法如下所示:void setText(String str)String getText()对于方法setText()来说,参数str指定了新的标签。对于getText()方法来说,当前的标签中的文本被返回。在标签中,你还可以通过调用setAlignment()方法来设定字符串的对齐方式。同时,你也可以通过调用getAlignment()方法来获得当前的对齐方式。这些方法如下所示:void setAlignment(int how)int getAlignment()这里,整数how必须是前面介绍的对齐方式中的一种。下面的例子生成了三个标签,并将它们加入到一个小应用程序中。/ Demonstrate Labelsimport java.awt.*;import java.applet.*;/*/public class LabelDemo extends applet public void init() Label one = new Label(One); Label two = new Label(Two); Label three = new Label(Three); / add labels to applet window add(one); add(two); add(three); 下面是由LabelDemo这个小应用程序所生成的窗口。请注意,在窗口中,标签由默认的布局管理器组织。稍后,你将看到如何更精确地控制标签的位置。22.3 使 用 按 钮使用最广泛的控件是下压式按钮。下压式按钮是一种包含一个标签并能在被按下时产生事件的控件。下压式按钮是Button类的对象。Button类定义了如下两种构造函数:Button()Button(String str)第一种方式生成一个空的按钮。第二种方式生成了一个以参数str为标签的按钮。在按钮被生成之后,你能通过调用setLabel()方法设定它们的标签。同时,你也可以通过调用getLabel()方法来获得它的标签。这些方法如下所示:void setLabel(String str)String getLabel()这里,参数str成为按钮的新标签。22.3.1 按钮事件处理每当按钮被按下时,就产生一个动作事件。动作事件被发送给任何先前注册过的事件监听器,这些监听器为了从组件获得事件通知而被注册。每一个事件监听器都实现了ActionListener接口。这个接口中定义了actionPerformed()方法,它在事件产生时被调用。一个ActionEvent对象作为参数被提供给此方法。它既包含了对产生事件的按钮的引用,也包含了对按钮标签的字符串的引用。通常,这两者中的任何一个都能用来惟一确定这个按钮,这一点你将会在下面看到。下面的这个例子产生了三个标签分别为“Yes”,“No”和“Undecided”的按钮。每当按钮被按下时,将显示一条消息,用于报告是哪一个按钮被按下。在这个版本中,按钮的标签被用来判断哪一个按钮被按下。标签可以通过调用方法getActionCommand()来获得,这个getActionCommand()方法属于被传递给actionPerformed()方法的ActionEvent对象。/ Demonstrate Buttonsimport java.awt.*;import java.awt.event.*;import java.applet.*;/* */public class ButtonDemo extends applet implements ActionListener String msg = ; Button yes, no, maybe; public void init() yes = new Button(Yes);no = new Button(No);maybe = new Button(Undecided);add(yes);add(no);add(maybe);yes.addActionListener(this);no.addActionListener(this);maybe.addActionListener(this);public void actionPerformed(ActionEvent ae) String str = ae.getActionCommand();if(str.equals(Yes) msg = You pressed Yes.;else if(str.equals(No) msg = You pressed No.;else msg = You pressed Undecided.;repaint();public void paint(Graphics g) g.drawString(msg, 6, 100);ButtonDemo小应用程序的标准输出如图22-12所示。图22-1 ButtonDemo小应用程序的输出我们提到过,除了比较按钮标签之外,还可以用另一种方式来确定是哪一个按钮被按下,第2种方式是通过比较你加入到窗口的按钮对象与调用getSource()所获得的对象来进行的。为完成此功能,你必须在对象被加入时保存它们的列表。下面的小应用程序示范了如何使用这个方法:/ Recognize Button objects.import java.awt.*;import java.awt.event.*;import java.applet.*;/* */public class ButtonList extends applet implements ActionListener String msg = ; Button bList = new Button3; public void init() Button yes = new Button(Yes); Button no = new Button(No); Button maybe = new Button(Undecided); / store references to buttons as added bList0 = (Button) add(yes); bList1 = (Button) add(no); bList2 = (Button) add(maybe); / register to receive action events for(int i = 0; i 3; i+) bListi.addActionListener(this); public void actionPerformed(ActionEvent ae) for(int i = 0; i 3; i+) if(ae.getSource() = bListi) msg = You pressed + bListi.getLabel(); repaint(); public void paint(Graphics g) g.drawString(msg, 6, 100); 在这个例子中,程序在按钮被加入到小应用程序窗口时,就以数组方式保存了每个按钮的引用(注意当按钮被加入时add()方法返回它的引用)。接下来在actionPerformed()方法中,此数组被用来确定被按下的按钮。对于简单的小应用程序来说,用标签来识别按钮通常要容易得多。但在某些情况下,例如如果你要在程序的执行过程中改变按钮中的标签,或者使用了有相同标签的按钮,这时使用它的对象引用来判断按压了哪一个按钮就容易得多。22.4 使用复选框复选框(Checkbox)是一个用来将选项开启或关闭的控件。它由一个小框组成,其中可能包含一个复选标记。每一个复选框都有一个标签来描述它所代表的选项。你可以通过点击复选框来改变它的状态。复选框可以单独使用,也可作为一个组的一部分来使用。复选框是Checkbox类的对象:Checkbox支持以下这些构造函数:Checkbox()Checkbox(String str)Checkbox(String str, boolean on)Checkbox(String str, boolean on, CheckboxGroup cbGroup)Checkbox(String str, CheckboxGroup cbGroup, boolean on)第一种形式生成了一个所含标签初始为空白的复选框,复选框未被选中。第二种形式生成了一个标签由参数str指定的复选框,复选框未被选中。第三种形式允许设定复选框的初始状况,如果参数on为true,则复选框初始被选中;否则它被清除。第四和第五种形式生成了一个由参数str设定的标签,它所属的组由参数cbGroup确定。如果复选框不属于一个组,参数cbGroup必须为null(复选框组在下一节讲述)。参数on的值决定了复选框的初始状态。为了获得复选框的当前状态,可以调用getState()方法。如果要设定复选框的状态,可以调用setState()。你还能通过调用getLabel()方法来获得与复选框相关的当前标签。为了设置复选框的标签,可以调用setLabel()方法。这些方法如下所示:boolean getState()void setState(boolean on)String getLabel()void setLabel(String str)在这里,如果参数on为true,则复选框被选中;如果为false,则被清除。参数str传递的字符串成为与所调用的复选框相关的新标签。22.4.1 处理复选框每次复选框被选中或被取消选定时,就产生一个事件。该事件被发送给任何先前注册过的事件监听器,这些监听器为了从组件获得事件通知而被注册。每个监听器都实现了一个ItemListener接口。这个接口定义了itemStateChanged()方法。一个ItemEvent对象被作为参数提供给这个方法,其中包含了关于事件的信息(例如,是否它被选中)。下面的程序生成了四个复选框。第一个复选框的初始状态是被选中。每一个复选框的状态都被显示。每次你改变复选框的状态时,状态显示都被更新。/ Demonstrate check boxes. import java.awt.*;import java.awt.event.*;import java.applet.*;/* */public class CheckboxDemo extends applet implements ItemListener String msg = ; Checkbox Win98, winNT, solaris, mac; public void init() Win98 = new Checkbox(Windows 98, null, true); winNT = new Checkbox(Windows NT/2000); solaris = new Checkbox(Solaris); mac = new Checkbox(MacOS); add(Win98); add(winNT); add(solaris); add(mac); Win98.addItemListener(this); winNT.addItemListener(this); solaris.addItemListener(this); mac.addItemListener(this); public void itemStateChanged(ItemEvent ie) repaint(); / Display current state of the check boxes. public void paint(Graphics g) msg = Current state: ; g.drawString(msg, 6, 80); msg = Windows 98: + Win98.getState(); g.drawString(msg, 6, 100); msg = Windows NT/2000: + winNT.getState(); g.drawString(msg, 6, 120); msg = Solaris: + solaris.getState(); g.drawString(msg, 6, 140); msg = MacOS: + mac.getState(); g.drawString(msg, 6, 160); 这个例子的输出如图22-2所示。图22-2 CheckboxDemo小应用程序的输出22.5 复 选 框 组生成一系列互斥的复选框是可能的,在任何时间其中只能有一个复选框被选中。这些复选框通常被称为单选按钮,之所以起这个名字,是因为它们的行为就像是汽车上无线广播的选台器,任何时间只能选一个电台。为生成一系列互斥的复选框,你在构造复选框时必须先定义它们所属的组,并对这个组进行设定。通过调用getSelectedCheckbox()方法可以确定组中哪个复选框被选中。通过调用setSelectedCheckbox()方法,你能设定哪个复选框被选中。这些方法如下所示:Checkbox getSelectedCheckbox()void setSelectedCheckbox(Checkbox which)在这里,参数which是你想要选定的复选框。先前选中的复选框将被关闭。下面是一个使用了复选框作为组的一部分的例子:/ Demonstrate check box group. import java.awt.*;import java.awt.event.*;import java.applet.*;/* */public class CBGroup extends applet implements ItemListener String msg = ; Checkbox Win98, winNT, solaris, mac; CheckboxGroup cbg; public void init() cbg = new CheckboxGroup(); Win98 = new Checkbox(Windows 98, cbg, true); winNT = new Checkbox(Windows NT/2000, cbg, false); solaris = new Checkbox(Solaris, cbg, false); mac = new Checkbox(MacOS, cbg, false); add(Win98); add(winNT); add(solaris); add(mac); Win98.addItemListener(this); winNT.addItemListener(this); solaris.addItemListener(this); mac.addItemListener(this); public void itemStateChanged(ItemEvent ie) repaint(); / Display current state of the check boxes. public void paint(Graphics g) msg = Current selection: ; msg += cbg.getSelectedCheckbox().getLabel(); g.drawString(msg, 6, 100); CBGroup小应用程序产生的输出如图22-3所示。注意,这里的复选框是圆形的。图22-3 CBGroup小应用程序的输出22.6 选择框控件Choice类用来生成弹出式的列表项,用户可以从中选择。因此,可以说选择框(Choice)就是一种形式的菜单。当未被激发时,选择框仅占据刚刚够用的空间来显示当前的被选项。当用户点击它时,所有选项的列表将被弹出,可以从中作出新的选择。列表中的每一项都是一个字符串,以左对齐的标签形式出现,并按被加入选择框对象的顺序排列。选择框仅仅定义了默认的构造函数,这个构造函数将产生一个空列表。为了将新的选项加入列表,可以调用addItem()或add()方法。如下所示:void addItem(String name)void add(String name)在这里,参数name是被加入选项的名字。被加入到列表中的选项的显示顺序是由调用add()或addItem()方法的顺序决定的。为了确定当前哪些选项被选中,你可以调用getSelectedItem() 或 getSelectedIndex()方法。这些方法如下所示。String getSelectedItem()int getSelectedIndex()GetSelectedItem()方法返回一个包含相应项名字的字符串,而GetSelectedIndex()方法返回选项索引。第一个选项的索引为零。在默认的情况下,第一个被加入列表的选项被选中。为了获得列表中选项的数目,你可以调用方法getItemCount()。通过调用select()方法,并给出一个从零开始的整数索引,或一个与列表中的名字相匹配的字符串,你能设定当前的被选项。这些方法如下所示:int getItemCount()void select(int index)void select(String name)通过给出一个索引,你可以调用方法getItem()获得此索引所代表的选项的名字。这个方法如下所示:String getItem(int index)在这里,参数index设定了所要求的选项的索引。22.6.1 处理选择框列表每当一个选择框选项被选时,就产生了一个选项事件。该事件被发送给任何先前注册过的事件监听器,这些监听器为了从组件获得事件通知而被注册。每个监听器都实现了一个ItemListener接口。此接口定义了itemStateChanged()方法。一个ItemEvent对象被作为参数提供给这个方法。这里有一个生成两个选择框菜单的例子。一个选择框用来选择操作系统,另一个则用于选择浏览器:/ Demonstrate Choice lists. import java.awt.*;import java.awt.event.*;import java.applet.*;/* */public class ChoiceDemo extends applet implements ItemListener Choice os, browser; String msg = ; public void init() os = new Choice(); browser = new Choice(); / add items to os list os.add(Windows 98); os.add(Windows NT/2000); os.add(Solaris); os.add(MacOS); / add items to browser list browser.add(Netscape 1.1); browser.add(Netscape 2.x); browser.add(Netscape 3.x); browser.add(Netscape 4.x); browser.add(Internet Explorer 3.0); browser.add(Internet Explorer 4.0); browser.add(Internet Explorer 5.0); browser.add(Lynx 2.4); browser.select(Netscape 4.x); / add choice lists to window add(os); add(browser);/ register to receive item events os.addItemListener(this); browser.addItemListener(this); public void itemStateChanged(ItemEvent ie) repaint(); / Display current selections. public void paint(Graphics g) msg = Current OS: ; msg += os.getSelectedItem(); g.drawString(msg, 6, 120); msg = Current Browser: ; msg += browser.getSelectedItem(); g.drawString(msg, 6, 140); 这个例子的输出如图22-4所示。图22-4 ChoiceDemo小应用程序的输出22.7 使用列表框列表框(List)类提供了一个简洁的多选项滚动列表。与Choice对象不同的是,Choice对象只能显示菜单中的单一的被选项,而List对象能被构造成在可见窗口显示任意数量选项的对象。在列表框中可以同时选择多个选项。列表框提供了如下的构造函数:List()List(int numRows)List(int numRows, boolean multipleSelect)第一种形式生成了一个List控件,它在任何时间仅允许一个选项被选中。在第二种形式中,参数numRows的值指定了列表框中一直可见的选项数量(其他的在需要时滚动可见)。在第三种形式中,如果参数multipleSelect 为true,则用户可一次选两个或更多的选项。如果它为false,则仅有一项可选。为了向列表框加入一个选项,可以调用add()方法。它有以下两种形式:void add(String name)void add(String name, int index)在这里,参数name是被加入列表框的项的名字。第一种形式在列表框尾加入选项。第二种形式在参数index所确定的索引处加入选项。索引从零开始。你可将它设为-1以将选项加入列表框的末尾。对于仅允许一个选项被选中的列表框来说,你能通过调用getSelectedItem() 或 getSelectedIndex() 来确定当前哪一项被选中。这些方法所示如下:String getSelectedItem()int getSelectedIndex()getSelectedItem()方法返回一个包含选项名字的字符串。如果多于一个的选项被选中或没有任何选项被选中,就返回null。getSelectedIndex()返回选项的索引。第一项的索引为零。如果多个选项被选中,或者无选项被选中,则返回-1。对于允许选中多个选项的列表框来说,你必须调用getSelectedItems()或getSelected Indexes()方法(所示如下)来确定当前选项,如下所示:String getSelectedItems()int getSelectedIndexes()getSelectedItems()方法返回一个包含了当前被选项的名字的数组。getSelectedIndexes()返回一个包含当前被选中的项的索引。为获得列表框中项的数目,可以调用getItemCount()方法。给定一个从零开始的整数索引,你能通过调用select()方法设定当前被选的项。这些方法如下所示:int getItemCount()void select(int index)如果给定索引,你能通过调用getItem()方法,获得与此索引相关的选项的名字。该方法的一般形式如下:String getItem(int index)这儿,index设定了想要的项的索引。22.7.1 处理列表框为了处理列表框事件,你需要实现ActionListener接口。每当一个列表框中的项被双击时,就产生一个ActionEvent对象。它的getActionCommand()方法能被用来接收新的被选项的名字。而且,每当一项通过单击被选定或被取消选定时,一个ItemEvent对象就被产生。它的getStateChange()方法能被用来确定一次选定或取消选定动作是否触发该事件。getItemSelectable()返回触发这个事件的对象的引用。下面是一个有关列表框的例子,它将上一节选择框控件转变为列表框控件:一个多选列表框框和一个单选列表框。/ Demonstrate Lists. import java.awt.*;import java.awt.event.*;import java.applet.*;/* */public class ListDemo extends applet implements ActionListener List os, browser; String msg = ; public void init() os = new List(4, true); browser = new List(4, false); / add items to os listos.add(Windows 98); os.add(Windows NT/2000); os.add(Solaris); os.add(MacOS); / add items to browser list browser.add(Netscape 1.1); browser.add(Netscape 2.x); browser.add(Netscape 3.x); browser.add(Netscape 4.x); browser.add(Internet Explorer 3.0); browser.add(Internet Explorer 4.0); browser.add(Internet Explorer 5.0); browser.add(Lynx 2.4);browser.select(1); / add lists to window add(os); add(browser); / register to receive action events os.addActionListener(this); browser.addActionListener(this); public void actionPerformed(ActionEvent ae) repaint(); / Display current selections. public void paint(Graphics g) int idx; msg = Current OS: ; idx = os.getSelectedIndexes(); for(int i=0; iidx.length; i+) msg += os.getItem(idxi) + ; g.drawString(msg, 6, 120); msg = Current Browser: ; msg += browser.getSelectedItem(); g.drawString(msg, 6, 140); ListDemo applet的输出如图22-5所示。请注意浏览器列表框中有一个滚动条,这是由于生成列表框时指定的显示行数与实际项目总数不符所致。图22-5 ListDemo小应用程序的输出22.8 管理滚动条滚动条(scroll bar)被用来对最大值与最小值之间的连续值进行选定。滚动条可被水平或垂直定向。一个滚动条实际上是几个部分的组合。每一端都有一个箭头,单击它可使滚动条的当前值向箭头所指的方向移动一个单位。滚动条的当前值距最大值和最小值的相对位置可由滚动条的滑块(或拇指)来提示。滑块能由用户拖向新的位置,拖动之后滚动条将反映此值。用户可以点击滑块的任何一侧的背景区域使滑块沿那个方向以多于1的增幅移动。一般来说,这个动作可以使页面以多种形式向前或向后翻。滚动条被封装在Scrollbar类中。Scrollbar定义了下面的构造函数:Scrollbar()Scrollbar(int style)Scrollbar(int style, int initialValue, int thumbSize, int min, int max)第一种形式生成了一个垂直滚动条。第二和第三种形式允许你指定滚动条的方向。如果style为Scrollbar.VERTICAL,则生成一个垂直滚动条。如果style被设为Scrollbar.HORIZONTAL,则滚动条为水平的。在构造函数的第三种形式中,滚动条的初始值由initialValue传递。滑块的高度所代表的单元的个数由thumbSize所传递。滚动条的最大和最小值由min和max设定。如果用前两个构造函数来构造滚动条,那么你需要在使用它前,通过使用setValues()来设定参数,这个方法如 下所示:void setValues(int initialValue, int thumbSize, int min, int max)其中的参数与第三个构造函数的参数意义相同。为了获得滚动条的当前值,可以调用getValue()方法。它返回当前的设置。为了设定当前值,可以调用setValue()。这些方法如下所示:int getValue()void setValue(int newValue)这里,参数newValue为滚动条指定了新值。当你设定一个新值,滚动条内部的滑块将被定位以反映新值。你也能够通过getMinimum() 和getMaximum()方式来查看最大值和最小值,如下所示:void getMininumvoid getMaximum这两种方法返回所要求的数。在默认的情况下,每次滚动条向上或向下滚动一行时,它的值都要加一或减一。你可以通过调用setUnitIncrement()来改变这个增量。默认情况下,向上和向下滚动一页的增值为10。你能通过调用setBlockIncrement()来改变此值。方法如下所示:void setUnitIncrement(int newIncr)void setBlockIncrement(int newIncr)22.8.1 处理滚动条为处理滚动条事件,你需要实现AdjustmentListener接口。每次用户与滚动条进行交互时,都将生成一个AdjustmentEvent对象。它的getAdjustmentType()方法被用来确定调节类型。调节事件的类型如下所示:BLOCK_DECREMENT产生一个向下翻页事件BLOCK_INCREMENT产生一个向上翻页事件TRACK产生一个绝对跟踪事件UNIT_DECREMENT滚动条中的向下按钮被按下UNIT_INCREMENT滚动条中的向上按钮被按下下面的例子生成了水平和垂直的滚动条并显示它们的当前设定。如果你在窗口中拖动鼠标,每次拖动事件的坐标将被用来更新滚动条。在当前的拖动位置上显示一个星号。/ Demonstrate scroll bars. import java.awt.*;import java.awt.event.*;import java.applet.*;/* */public class SBDemo extends applet implements AdjustmentListener, MouseMotionListener String msg = ; Scrollbar vertSB, horzSB; public void init() int width = Integer.parseInt(getParameter(width); int height = Integer.parseInt(getParameter(height); vertSB = new Scrollbar(Scrollbar.VERTICAL, 0, 1, 0, height); horzSB = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, width); add(vertSB); add(horzSB); / register to receive adjustment events vertSB.addAdjustmentListener(this); horzSB.addAdjustmentListener(this); addMouseMotionListener(this); public void adjustmentValueChanged(AdjustmentEvent ae) repaint(); / Update scroll bars to reflect mouse dragging. public void mouseDragged(MouseEvent me) int x = me.getX(); int y = me.getY(); vertSB.setValue(y); horzSB.setValue(x); repaint(); / Necessary for MouseMotionListener public void mouseMoved(MouseEvent me) / Display current value of scroll bars. public void paint(Graphics g) msg = Vertical: + vertSB.getValue(); msg += , Horizontal: + horzSB.getValue(); g.drawSt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美术项链艺术创作全解析
- 河北省鹿泉市2025年上半年公开招聘村务工作者试题含答案分析
- 河北省临西县2025年上半年事业单位公开遴选试题含答案分析
- 2025年二手房装修工程设计与施工监理、验收合同范本
- 2025年建筑项目竣工测绘服务合同
- 2025年度轻钢龙骨砌筑工程劳务承包合同
- 2025年荒山荒滩治理承包地租赁合同汇编
- 2025年充电桩安装与充电站安全保障体系合同范本
- 2025版汽车维修贷款授权委托合同
- 2025东航大客户航空保险定制服务合同
- 《新能源材料概论》 课件 第2章 热电转换新能源材料
- 矿产品买卖合同
- DB37-T 4382-2021 环保稳定型胶粉改性沥青及混合料施工技术规程
- 《当代中日关系》课件
- 大学生军事技能训练(同济大学)学习通测试及答案
- T-CSPSTC 72-2021 隧道衬砌脱空注浆治理技术规程
- 碳中和技术概论 课件 第1-3章 碳中和概述、太阳能、风能
- 2024年7月生化室内质控总结报告
- 危重症患者的血糖管理课件
- GB/T 19342-2024手动牙刷一般要求和检测方法
- 选择性必修第一册人教A版2024-2025学年上学期期中高二数学模拟测试卷含答案
评论
0/150
提交评论