版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务5.1油耗计算程序设计
【任务目标】(1)了解工具包AWT和Swing的使用方法;(2)掌握JLabel、JTextField和JButton类的使用方法;(3)掌握按钮的事件处理机制。【任务陈述】用户在指定的区域输入加油金额、公里数和汽油的价格,单击“计算”按钮,显示汽车的百公里油耗。计算公式:百公里油耗(升)=加油金额/汽油的价格/(公里数×100)。本任务的运行结果如图5-1所示。下一页返回任务5.1油耗计算程序设计
【知识储备】Java对GUI的支持包括基本控件、界面容器事件机制、布局设计、图形和图像等,并提供了大量的类用于实现界面设计,主要有AWT工具集和Swing工具集。5.1.1抽象窗口工具集(AWT)AWT是AbstractWindowToolkit的缩写,称为抽象窗口工具集,开发图形界面的应用程序时,需要用到AWT。AWT是Java开发工具包(JDK)的一部分,是Java基本类(JFC)的核心。AWT的作用是给用户提供基本的界面组件,如窗口、按键、菜单等。此外,AWT还提供事件处理结构,支持剪贴板、数据传输和图像操作。上一页下一页返回任务5.1油耗计算程序设计
AWT中类与类之间的关系如图5-2所示,AWT由java.awt包提供,该包中有许多用来设计用户界面的类和接口,用户可在JavaApplication或Applet中进行GUI设计。AWT包含四个主要的类:组件(Component)类、容器(Container)类、图形(Graphics)类和布局管理器(LayoutManager)类。由于AWT属于重量级组件,消耗资源较多,不同平台中AWT组件的外观也有所不同,且其功能受限于本地组件。为了克服AWT组件的缺点,Java在AWT的基础上,又提供了Swing组件。上一页下一页返回任务5.1油耗计算程序设计
5.1.2Swing组件简介Swing组件由javax.swing包提供,是内容丰富、功能强大的轻量级组件。Swing组件与AWT组件不同,显示及事件处理等工作都由Java编写的UI类来完成。轻量级组件占用资源较少,效率较高,显示外观与平台无关,功能更强、更灵活。Swing组件是纯Java语言实现的,并不依赖本地的工作平台,Swing具有和AWT同性质的组件,如按钮等。从命名的角度看,Swing组件的名称都以字母“J”作为首字母,如AWT按钮组件命名为Button,而Swing的按钮组件命名为JButton。Swing组件的结构如图5-3所示。Swing还定义了其他应用组件,如树组件、表组件和列表组件等。上一页下一页返回任务5.1油耗计算程序设计
小知识:Swing组件与AWT组件的区别:(1)Swing标签和按钮可以显示文本和图片,AWT中同性质的组件只能显示文本。(2)用户可以定义Swing组件的外观,而AWT组件的外观取决于本地操作系统。(3)Swing具有良好的可扩展性,用户可以扩展或自定义组件,而AWT组件的扩展性较差。AWT组件由于受到自身条件的限制,目前在GUI用户界面开发中应用较少。Swing组件在图形用户界面领域中应用更加广泛。但这并不意味着AWT组件被Swing组件完全取代。Swing是基于AWT构架的更加强大的GUI组件。上一页下一页返回任务5.1油耗计算程序设计
5.1.3JComponent组件JComponent类是java.awt包中容器类Container的子类,因此所有继承自JComponent类的轻量级组件也都是容器。注意,不能把组件直接添加到Swing窗体中,应当把组件添加到Swing窗体所包含的一个称为内容面板的容器中。在Swing窗体的内容面板中,尽量只使用轻量组件,否则可能会出现意想不到的问题。Swing窗体通过调用publicContainergetContentPane()方法获取它的内容面板。上一页下一页返回任务5.1油耗计算程序设计
5.1.4JFrame组件JFrame组件是与AWT中的Frame组件相对应的Swing组件,继承自java.awt.Frame类,功能与Frame组件类似。JFrame中只能有一个组件JRootPane,调用JFrame.getContentPane()方法可获得JFrame中内置的JRootPane对象,应用程序不能直接在JFrame实例对象上增加组件和设置布局管理器,应该在JRootPane对象上增加子组件和设置布局管理器。JDK5.0之后,重写了add(Componentcomp)和setLayout(LayoutManager1)方法,直接调用这两个方法也可以操作JContentPane对象。当用户单击JFrame的关闭按钮时,JFrame会自动隐藏,但没有关闭,可以在windowClosing事件中关闭,更常用的关闭方式是调用JFrame的相应方法。上一页下一页返回任务5.1油耗计算程序设计
实例5-1:一个简单的SwingGUI应用程序。该程序生成一个窗口,窗口中有一个标签,用于显示输出。程序运行界面如图5-4所示。
上一页下一页返回任务5.1油耗计算程序设计
5.1.5Swing工具集的其他常用组件1.JLabel组件标签组件用于显示文本信息、图标或二者的组合。JLabel组件不响应用户的输入,即JLabel组件不能编辑。JLabel组件可以将内容垂直或水平显示,通常默认文本信息的显示状态为水平,而图标的显示状态为垂直。标签组件一般用于提示信息。上一页下一页返回任务5.1油耗计算程序设计
2.JTextField组件JTextField组件用于创建文本框,文本框位于接受单行文本信息输入的区域,通常用于接受用户信息或其他文本信息的输入。当用户输入文本信息后,如果为JTextField对象添加了事件处理,按回车键会触发一定的动作。JPasswordField是JtextField的子类,是一种特殊的文本框,也位于接受单行文本信息输入的区域,但会用回显字符串代替输入的文本信息。JPasswordField组件也称为密码文本框,JPasswordField默认的回显字符是“∗”,用户可以自行设置回显字符。上一页下一页返回任务5.1油耗计算程序设计
3.JTextArea组件JTextArea组件是文本区组件,与JTextField组件一样能接受文本信息的输入和显示。与JTextField组件不同的是,JTextArea对象可以实现文本多行输入和显示,突破了JTextField组件单行输入的限制。但是,如果文本信息的行数超过文本区限定的行数,超出的文本信息不能显示,为了解决这个问题,可以借助JScrollPane滚动窗格组件。将文本区放置到滚动窗格中,即可实现超出文本信息的滚动输出,实现语法为:newJScrollPane(JTextArea文本区对象)。4.JButton组件JButton组件用于创建按钮,当用户按下按钮时会触发一定的动作。JButton组件创建的按钮可以显示图标和文本信息,用于有效地提示及帮助用户操作。上一页下一页返回任务5.1油耗计算程序设计
5.复选框和单选框JCheckBox组件用于创建具有文本和图标的复选框,这种复选框具有“选中”和“取消选中”两种状态,通过用户的选择实现转换。通常,用多个复选框作为一组组合条件,用户可以同时选择多个复选框。JRadioButton组件用于创建具有文本和图标的单选按钮,和JCheckBox组件一样,具有“选中”和“取消选中”两种状态。可以定义一个或多个单选按钮并添加到一个Button⁃Group按钮组作为整体进行处理。在任何情况下,一个按钮组中只能有一个单选按钮处于“选中”状态。因此,通常定义包含多个单选按钮的按钮组实现在多个条件中选择一个的功能。上一页下一页返回任务5.1油耗计算程序设计
6.JComboBox组件JComboBox组件用于创建组合框对象,根据组合框是否可编辑的状态,可以将组合框分成两种常见的外观。可编辑状态下的外观视为文本框和下拉列表的组合,不可编辑状态下的外观可视为按钮和下拉列表的组合。在按钮或文本框的右边有一个带有下三角符号的下拉按钮。通过单击该下拉按钮,可以出现一个内容列表。组合框通常用于从列表的“多个项目中选择一个”的操作。7.JList组件JList组件用于定义列表,允许用户选择一个成多个项目,与JTextArea类似,JList本身不支持滚动条功能。上一页下一页返回任务5.1油耗计算程序设计
【任务实施】1.实施思路与方案可以定义一个油耗计算器窗口类,继承自窗体类JFrame,并实现ActionListener接口。窗口中通过JTextField类添加3个文本框,通过JButton类添加计算按钮,通过JLabel类添加标签显示计算结果。通过实现ActionListener接口的actionPerformed()方法响应用户单击按钮的操作。2.解决步骤(1)设计油耗计算器窗口;(2)定义油耗计算器窗口类的构造方法;(3)定义actionPerformed()单击动作处理方法;(4)定义main()主方法,创建对象进行测试。上一页下一页返回任务5.1油耗计算程序设计
3.程序代码上一页下一页返回任务5.1油耗计算程序设计
上一页下一页返回任务5.1油耗计算程序设计
【任务拓展】Swing组件中除包括上述组件外,还有些其他组件,下面对部分组件进行讲解。1.JDialog组件JDialog类是java.awt包中Dialog类的子类。常见构造方法如下:(1)JDialog():创建一个没有标题且没有指定所有者窗体的无模式对话框。(2)JDialog(Frameowner,Stringtitle):创建一个具有指定标题和指定所有者窗体的无模式对话框。上一页下一页返回任务5.1油耗计算程序设计
(3)JDialog(Frameowner,booleanmodal):创建一个没有标题,但有指定所有者窗体的有模式或无模式对话框。(4)JDialog(Dialogowner,Stringtitle):创建一个具有指定标题和指定所有者对话框的无模式对话框。(5)JDialog(Dialogowner,booleanmodal):创建一个没有标题,但有指定所有者对话框的有模式或无模式对话框。JDialog组件的使用和JFrame类似,不能把组件直接添加到JDialog中,JDialog也含有一个内容面板,应当把组件添加到内容面板中。2.JPanel组件JPanel组件定义的面板实际上是一种容器组件,用于容纳其他轻量级的组件,此外,用户还可以用JPanel面板容器绘制图形。上一页下一页返回任务5.1油耗计算程序设计
实例5-2:创建面板,并在面板中放置一个按钮。代码如下:程序运行结果如图5-5所示。
上一页下一页返回任务5.1油耗计算程序设计
3.JScrollPane组件JScrollPane组件可以把一个组件放到一个滚动窗口中,然后通过拖动滚动条查看组件内容。实例5-3:演示JScrollPane组件的使用方法。提示:本程序显示一窗口,窗口中包含一个文本区域,如果输入的文字超出行、列显示范围,则自动显示水平和垂直的滚动条。代码如下:上一页下一页返回任务5.1油耗计算程序设计
4.JSplitPane组件JSplitPane组件用于拆分窗口,拆分窗口被分成两部分,有水平拆分和垂直拆分两种。构造方法如下:(1)JSplitPaion(intnewOrient,booleannewContinuousLayout,newLeftComponent,ComponentnewRightComponent);(2)JSplitPane(intanewOrientation,ComponentnewLeftComponent.ComponentnewRightComponent);上一页下一页返回任务5.1油耗计算程序设计
其中,newOrientation取值:JSplitPane.HORIZONTAL_SPLTTorJSplitPane.VERTICAL_SPLIT;newContinuousLayout表示拆分线移动时组件是否连续变化;newLeftComponent,newRightComponent表示窗口中的两个组件。实例5-4:演示如何用JSplitPane组件拆分窗口。代码如下:程序运行界面如图5-6所示。上一页下一页返回任务5.1油耗计算程序设计
5.JInternalFrame组件内部窗体JInternalFrame组件用于在一个主窗口内显示一个或多个子窗口,每个子窗口都可以拖动、关闭、最小化、调整大小,可以显示标题和支持菜单栏。使用时,需先将子窗口对象添加到JDesktopPane组件中,再将JDesktopPane对象添加到主窗口的内容面板中,子窗口默认不可见,因此,需要设置其可见性和大小。构造方法格式如下:上一页下一页返回任务5.1油耗计算程序设计
实例5-5:演示内部窗体JInternalFrame的使用方法。代码如下:上一页下一页返回任务5.1油耗计算程序设计
程序运行界面如图5-7所示。上一页下一页返回任务5.1油耗计算程序设计
除了上述组件外,还有一些常用组件,如计时器JTimer、进度条JProgressBar、树形组件JTree、表格JTable、文本窗格JTextPane、文件选择器JFilechooser等,有些组件会在后面的任务中用到,限于篇幅在此不作详细介绍,读者可以通过查看JDK帮助文档了解其使用方法。【任务实训】1.实训目的掌握使用基本组件构造GUI程序的基本步骤和方法。2.实训内容在窗口中输入整数n,计算输出n的3次方,如图5-8所示。上一页返回任务5.2计算器界面设计
【任务目标】(1)掌握Java布局管理方式和布局管理器的使用方法;(2)掌握常见布局方式的特点和使用方法。【任务陈述】编写一个类似Windows自带计算器的程序,可以实现加、减、乘、除等基本数学运算。本任务只完成界面的设计和显示,用户操作响应和计算功能在后续任务中完成。任务运行结果如图5-9所示。下一页返回任务5.2计算器界面设计
【知识储备】5.2.1Java布局管理在实际编程中,每设计一个窗体,都要向其中添加若干组件。为了管理添加到窗体中的组件的布局,包括组件的大小、位置和排列方式,需要使用布局管理器。将加入容器的组件按照一定的顺序和规则放置,这就是布局。在Java中,布局通过布局管理器(LayoutManager)管理,Java提供了一组用于进行布局管理的类称为布局管理器或布局。所有布局管理类都实现了LayoutManager接口,容器内组件的大小和位置由布局管理器控制,当容器大小发生改变时可以自动调整,以尽量美观的方式适应容器的变化。上一页下一页返回任务5.2计算器界面设计
5.2.2常见的布局管理器常见的布局管理器包括FlowLayout、CardLayout、GridLayout、BorderLayout、BoxLayoutGridBagLayout等。不使用布局管理器则称为空布局或NULL布局,容器内组件的大小和位置用绝对值指定,当容器大小发生改变时,组件的位置和大小不会改变。1.网格布局网格布局是一种常用的布局方式,将容器的区域划分成矩形网格,每个矩形大小规格一致,组件可以放置在其中的一个矩形网格中。通过java.awt.GridLayout类创建网格布局管理器对象,实现对容器中的各组件的网格布局排列。具体的排列方向取决于容器的组件方向属性,组件方向属性包括从左向右和从右向左两种,用户可以根据实际需要设定方向属性,默认的方向属性是从左向右。上一页下一页返回任务5.2计算器界面设计
1)创建网格布局GridLayout类的构造方法如下:(1)GridLayout():创建默认的网格布局,每个组件占据一行一列;(2)GridLayout(introws,intcolumns):创建指定行数和列数的网格布局;(3)GridLayout(introws,intcolumns,inthgap,intvgap):创建指定行数和列数的网格布局,并指定水平间隔和垂直间隔的大小。2)GridLayout类的常用方法GridLayout类的常用方法见表5-1。上一页下一页返回任务5.2计算器界面设计
例如,以下代码可实现的运行效果如图5-10所示。上一页下一页返回任务5.2计算器界面设计
2.边界布局BorderLayout(边界布局管理器)将容器的布局分为5个区:北区、南区、东区、西区和中区。这几个区的分布规律是“上北下南,左西右东”,与地图的方位相同。当容器的大小改变时,容器中各个组件的相对位置不变,其中间部分组件的尺寸会发生变化,四周组件的宽度固定不变。组件可以指定自己放在哪个区内。因为只有5个区,所以最多只能容纳5个组件(不一定非要将5个区全部放置组件)。BorderLayout是JFrame和JApplet的默认布局方式。上一页下一页返回任务5.2计算器界面设计
1)创建边界布局BorderLayout类所定义的构造方法如下:(1)BorderLayout():生成默认的边界布局;(2)BorderLayout(inthorz,intvert):可以设定组件间的水平和垂直距离。上一页下一页返回任务5.2计算器界面设计
BorderLayout类所定义的常量值及指定的相应区域如下:(1)BorderLayout.NORTH:对应容器的顶部;(2)BorderLayout.EAST:对应容器的右部;(3)BorderLayout.SOUTH:对应容器的底部;(4)BorderLayout.WEST:对应容器的左部;(5)BorderLayout.CENTER:对应容器的中部。加入组件的方法是voidadd(Component0bj,intregion)。上一页下一页返回任务5.2计算器界面设计
实例5-6:将5个按钮加入BorderLayout的5个区。代码如下:上一页下一页返回任务5.2计算器界面设计
程序运行的效果如图5-11所示。上一页下一页返回任务5.2计算器界面设计
当窗口缩放时,组件的位置不发生变化,但组件的大小会相应改变。边界布局管理器给予南、北组件最佳高度,宽度与容器一致,给予东、西组件最佳宽度,而高度受到限制。如果窗口水平缩放,则南、北、中区域变化,如果窗口垂直缩放,则东、西、中区域变化。BorderLayout是窗口(JWindow)、框架(JFrame)、对话框(JDialog)等类型对象的默认布局。2)BorderLayout的常用方法BorderLayout的常用方法见表5-2。3.流布局FlowLayout类是流布局管理器,这种管理器的特点是,组件在容器内依照指定方向按照组件添加的顺序依次加入容器中,指定方向取决于FlowLayout管理器的组件方向属性。方向属性有从左向右和从右向左两种取值。在默认情况下,方向属性的值是从左向右。上一页下一页返回任务5.2计算器界面设计
1)创建流布局下面是流布局FlowLayout所定义的构造方法:(1)FlowLayout():创建流布局管理器居中对序,默认的水平和垂直间隙是5个单位。(2)FlowLayout(intalign):创建指定对齐方式的流布局管理器,默认的水平和垂直间隙是5个单位,具体的对齐方式有居中对齐、左向对齐、右向对齐、容器开始的方向对齐(LEADING)以及容器结束的方向对齐(TRAILING)。(3)FlowLayout(intalign,inthgap,intvgap):创建一个流布局管理器,具有指定的对齐方式以及指定的水平和垂直间隙。2)FlowLayout的常用方法FlowLayout的常用方法见表5-3。上一页下一页返回任务5.2计算器界面设计
4.卡片布局卡片布局管理器能将容器中的组件作为不同的卡片层叠排列,每次只能显示一张卡片,且每张卡片只能容纳一个组件。初次显示时,显示的是第一张卡片,卡片布局管理器是通过AWT包中的CardLayout类来创建的。1)创建卡片布局CardLayout的构造方法如下:(1)CardLayout():创建一个间隔为0的卡片布局;(2)CardLayout(inthgap,intvgap):创建一个指定水平间隔和垂直间隔的卡片布局。2.CardLayout的常用方法CardLayout的常用方法见表5-4。上一页下一页返回任务5.2计算器界面设计
【任务实施】1.实施思路计算器界面整体布局采用BorderLayout,在上部添加一个JTextField对象,作为结果显示区。在中部和右部各添加一个JPanel对象,作为嵌套容器。中部keyPanel对象采用GridLay⁃out,设置为5行3列,每个单元格显示一个按钮,用于显示数字键盘、小数点等按钮。右部operatorPanel对象采用GridLayout,设置为4行1列,显示加、减、乘、除四个按钮。操上一页下一页返回任务5.2计算器界面设计
作步骤如下:(1)建立Calculator类并指定超类JFrame;(2)设置窗口布局为BorderLayout;(3)在上部添加JTextField对象result;(4)在中部添加keyPanel及其上面的按钮;(5)在右部添加operatorPanel及其上面的按钮;(6)编写main()方法测试程序。上一页下一页返回任务5.2计算器界面设计
2.程序代码上一页下一页返回任务5.2计算器界面设计
上一页下一页返回任务5.2计算器界面设计
上一页下一页返回任务5.2计算器界面设计
【任务拓展】1.GridBagLayoutGridBagLayout中组件大小不必相同,组件按行和列排列,放置顺序不一定为从左至右和由上至下显示。通过使用以下语法,容器可获得GridBagLayout布局对象:(1)GridBagLayoutgb=newCrdBagLayou();(2)ContainerName.setLayout(gb);上一页下一页返回任务5.2计算器界面设计
要使用GridBagLayout布局,必须提供各组件的大小和布局等信息,GridBagConstraints类中包含GridBagLayout类用于定位和调整组件大小所需的全部信息。GridBagConstraints类成员变量gridx和gridy用于指定组件放置单元,gridwidth和gridheight用于指定组件占用行数和列数,weightx和weighty用于指定在一个GridBagLayout中应如何分配空间,以上变量的缺省值为0(即组件挤在容器中间)。ipadx和ipady用于指定组件的最小高度和宽度,fill用于指定在单元大于组件的情况下,组件如何填充此单元,共有4个可选值。fill的缺省值为GridBagConstraints.NONE(HORIZONTAL、VERTICAL、BOTH)。anchor用于指定组件放置在单元中的位置共有9个可选值,缺省值为GridBagConstraints.CENTER。上一页下一页返回任务5.2计算器界面设计
2.BoxLayoutBoxLayout布局中组件排为一行或一列,可使用支撑调整组件间的距离,使用胶水处理剩余空间。组件间隙可以通过直接设定实现,例如网格布局和边界布局,组件水平和垂直间距缺省值为0,但可以通过相应的构造方法设定空隙:(1)GridLayout(introws,intcols,inthgap,intvgap);(2)BorderLayout(inthgap,intvgap);上一页下一页返回任务5.2计算器界面设计
hgap和vgap分别为组件间水平和垂直方向的空白空间。此外,在布局时还可以使用空隙类,空隙类的对象是一种占用空间但不可见的组件,用于控制组件之间的间隔,使组件可以更好地显示。空隙类的创建方法如下:(1)Componentcomponent=Box.createRigidArea(size):方形空隙类(2)Componentcomponent=Box.createHorizontalGlue(size):水平空隙类。上一页下一页返回任务5.2计算器界面设计
(3)Componentcomponent=Box.createHorizontalStrut(size):水平空隙类,可以定义长度。(4)Componentcomponent=Box.createVerticalGlue(size):垂直空隙类。(5)Componentcomponent=Box.createVerticalStrut(size):垂直空隙类,可以定义高度。3.自定义布局自定义布局也称为“空布局”或“NULL布局”。调用方法setLayout(null)可为容器设置空布局。在空布局中可以通过调用组件的setBounds(intx,inty,intwidth,intheight)方法指定组件的位置和大小,容器大小改变时,空布局中的组件位置和大小均不变。上一页下一页返回任务5.2计算器界面设计
以上介绍了常见的布局管理器,每种布局管理器都有特定的用途。如要按行和列显示几个同样大小的组件,GridLayout会比较合适,要在尽可能大的空间里显示一个组件,就要选择BorderLayout或GridBagLayout。每个容器Container对象都有相应的缺省布局管理器。JFrame的缺省布局是BorderLayout,在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。通过setLayout()方法可以为容器设置新的布局。布局管理器不只是上述几种类型,常见的还有JRootPane.RootLayout、OverlayLayout、SpringLayout、ScrollPaneLayout等。更多的布局器可以通过JDK文档查看LayoutManager和LayoutManager2两个接口。用户也可以通过实现上述两个接口自定义布局方式。上一页返回任务5.3计算器事件处理
【任务实训】利用BoxLayout布局,设计登录界面,如图5-12所示。【任务目标】(1)理解Java委托事件处理机制;(2)了解常用的事件类、处理事件的接口及接口中的方法;(3)掌握编写事件处理程序的基本方法;(4)熟练掌握对按钮的ActionEvent动作事件的处理。【任务陈述】实现计算器的计算功能,在任务5.2的基础上,添加用户操作响应代码,即事件处理代码,完成计算功能。任务运行结果如图5-9所示。下一页返回任务5.3计算器事件处理
【知识储备】5.3.1Java事件Java事件是EventObject子类的对象,描述在特定时间,特定对象发生的特定事情。通过鼠标键盘与GUI界面直接或间接交互都会生成事件,如单击按钮、输入字符、选择列表框中的选项、单击鼠标等。事件不局限于界面操作,网络连接或断开等都可看作事件。事件源是生成事件的对象,用事件对象来描述自身状态的改变,即在某时刻该对象发生的事件。通过回调方法可以将事件发送给其他对象,以使其他对象对事件作出响应。监听器是对某类事件监听,并作出响应的对象,必须实现规定接口,该类接口称为监听器接口。上一页下一页返回任务5.3计算器事件处理
事件处理的关键步骤如下:(1)实现监听器接口,定义监听器类,在接口规定方法内实现事件处理逻辑;(2)创建监听器对象,将监听器添加到事件源;(3)触发事件,事件源回调监听器中的相关方法。例如,用户用鼠标单击某按钮(JButton的对象),则会产生一个ActionEvent事件,此时该按钮即事件源。如果要在计算器窗口类中响应单击按钮事件,计算器窗口即监听器,为了能够作为ActionEvent事件的监听器,Calculator类要实现接口ActionListener,添加publicvoidactionPerformed(ActionEvente)方法,并在该方法中编写单击按钮后要执行的代码。上一页下一页返回任务5.3计算器事件处理
接口ActionListener定义如下:将监听器添加到事件源按钮使用addActionListener(this)方法,其中,this代表Calculator类的当前对象,即计算器窗口对象。上一页下一页返回任务5.3计算器事件处理
ActionEvent的主要方法如下:(1)StringgetActionCommand():该方法获取事件的命令字符串,对按钮而言,该方法返回按钮上显示的文字。通过getActionCommand()返回结果可以知道用户单击的具体按钮。(2)publicObjectgetSource():该方法获取事件源对象引用。如果界面中有多个按钮,则将getSource()结果和每个按钮对象引用比较,即可知道用户单击的按钮。上一页下一页返回任务5.3计算器事件处理
5.3.2Java事件处理机制要理解事件处理机制,必须学会从组件开发者和组件使用者两个不同的角度思考问题。事件处理机制的任务是当组件发生某事件时,要设法通知组件使用者,并允许组件使用者作出响应。定义组件的目的在于在组件设计完成后可以重复使用此组件,组件设计在前,组件使用在后。在定义组件类时,并不知道将来谁要使用此组件,从而也无法确定事件的接收者和处理者。因此,需要一种方法,将事件消息正确地传递给组件使用者。事件处理示意如图5-13所示。上一页下一页返回任务5.3计算器事件处理
事件处理机制需要考虑的问题有以下三个方面。1)收消息的对象:消息的接收者在使用组件时,先向该组件进行注册,因此,组件应实现注册方法,如JTextField类的addActionListener()方法。(2)消息传递方法:向消息接收对象传递消息最根本的方法就是调用消息接收对象的一个方法,并通过方法参数将事件相关数据传递给消息接收对象。不管消息接收对象是何种类型,组件调用的方法必须是一致的,因为组件无法针对每一个消息接收对象进行特殊的方法调用。最好对组件来说所有消息接收对象都是一样的,都是同一种类型,支持相同的方法。那么现在的问题就变成:如何保证所有消息接收对象既是同一种类型,又能进行各自的事件处理。上一页下一页返回任务5.3计算器事件处理
要保证所有消息接收对象都是同一种类型,可以定义一个类,要求所有消息接收对象都由此类的子类创建,但这限制了消息接收对象的继承层次。更好的解决方案是使用接口,即将事件处理方法定义在一个接口中。强制注册对象必须实现此接口,事先规定对象方法的形式,而不关心其具体实现,这正是接口的优势所在。通过这种方法不需关注注册对象的继承关系,从而保证了消息接收对象类层次定义的自由。(3)传递数据的方法:可以直接通过传递参数,也可以采用现在Java采用的面向对象的方法———定义一个类用于描述事件,当具体事件产生时,则创建此事件类的对象,将该对象作为参数进行传递。上一页下一页返回任务5.3计算器事件处理
以上事件处理机制实际上采用了应用非常普遍的接口回调思想。其基本过程是:规定回调接口→实现回调接口→回调接口对象注册→接口回调。定义回调接口的对象,往往要提供某种服务,但接受服务的对象又不能事先确定,要实现这种服务,服务对象又必须调用客户对象的方法。此时,就可使用接口回调,接口回调的应用不局限于事件处理,网络通信中也经常使用,现实生活中这样的例子也有很多,如企业要先注册实现一些标准接口(如账目),工商税务即可对其进行税收管理等。上一页下一页返回任务5.3计算器事件处理
5.3.3Java事件体系结构Java事件体系结构如图5-14所示。所有Java事件共同的父类是EventObject。Java把事件类大致分为两种:语义事件(semanticevents)与底层事件(low-levelevents)。语义事件直接继承自AWTEvent,如ActionEvent、AdjustmentEvent、ComponentEvent等。底层事件则继承自ComponentEvent类,如ContainerEvent、FocusEvent、WindowEvent、KeyEvent等。Java事件类的相关说明见表5-5。上一页下一页返回任务5.3计算器事件处理
5.3.4Java事件监听器和监听方法java.awt.event包中还定义了11个监听器接口,见表5-6。每个监听器接口内部包含了若干处理相关事件的抽象方法。通常,每个事件类都有一个监听器接口与之对应,而事件类中的每个具体事件类型都有一个抽象方法与之对应,当具体事件发生时,该事件将被封装成一个事件类的对象作为实际参数传递给与之对应的方法,由该方法负责响应并处理发生的事件。例如,ActionListener接口,该接口定义了抽象方法publicvoidactionPerformed(ActionEvente),处理ActionEvent事件的类都必须实现ActionListener接口,并重写相应的actionPerformed()方法。上一页下一页返回任务5.3计算器事件处理
1.焦点事件任何GUI对象获得或失去焦点都被视为焦点事件FocusEvent,且事件源必须向事件监听器通知事件对象已失去或获得焦点。焦点监听器需要实现两个方法:focusGained()和focusLost()。对组件输入数据进行错误检查或范围校验时,对焦点事件的捕捉就显得尤其重要,其特有方法如下:(1)ComponentgetOppositeComponent():返回焦点变化事件中的另一组件;(2)booleanisTemporary():说明此事件是临时的或永久的;(3)StringparamString():获取说明此事件的字符串。上一页下一页返回任务5.3计算器事件处理
2.窗口事件当一个窗口被激活、禁止、关闭、正在关闭、最小化、恢复和打开时将生成窗口事件WindowEvent。窗口事件WindowEvent有7种类型,在WindowEvent类中定义了用于表示它们的整数常量,含义分别是:WINDOW_ACTIVATED表示窗口被激活;WINDOW_CLOSING表示用户要求窗口被关闭;WINDOW_DEACTIVATED表示窗口被禁用;WINDOW_DEICONI⁃FIED表示窗口被恢复;WINDOW_ICONIFIED表示窗口被最小化;WINDOW_OPENED表示窗口被打开。上一页下一页返回任务5.3计算器事件处理
使用接口WindowListener对相应的事件进行监听处理需要实现的方法包括windowActivated()、windowDeactivated()、windowClosing()、windowClosed()、windowDeiconified()、windowIconified()和windowOpened()。WindowListener接口对WindowEvent监听。在该接口中定义了7个方法:激活或禁用窗口时调用windowActivated()方法和windowDeactivated()方法;最小化窗口时调用windowIconified()方法;还原窗口时调用windowDeiconified()方法;打开或关闭窗口时调用windowOpened()方法或windowClosed()方法;正在关闭窗口时调用windowClosing()方法。WindowEvent的特有方法如下:上一页下一页返回任务5.3计算器事件处理
(1)intgetNewState():WINDOW_STATECHANGED事件的新状态:(2)intgetOldState():WINDOW_STATECHANGED事件的原状态:(3)WindowgetOppositeWindow():焦点或激活事件的另一影响窗口;(4)WindowgetWindow():事件创建窗口。上一页下一页返回任务5.3计算器事件处理
3.文字事件文字事件使用TextEvent类表示,使用接口TextListener对相应的事件进行监听。TextEvent事件是组件对象中的文字内容改变时所触发的事件。TextEvent事件会发生在JTextField和JTextArea两种对象上。TextListener接口对TextEvent事件监听,当单行文本框JTextField或多行文本框JTexArea中的文本发生变化时调用textValueChanged()方法。上一页下一页返回任务5.3计算器事件处理
4.键盘事件在按下或释放键盘上的一个键时触发键盘事件。处理键盘事件的程序需实现在java.awt.event包中定义的接口KeyListener,该接口定义了需要实现的键盘事件处理方法。如果程序需要处理特殊的键(如方向键),则需调用keyPressed()方法。键盘事件包括以下处理方法:(1)publicvoidKeyPressed(KeyEvente):处理按下键;(2)publicvoidKeyReleased(KeyEvente):处理释放键;(3)publicvoidKeyTyped(KeyEvente):处理敲击键盘。上一页下一页返回任务5.3计算器事件处理
KeyEvent事件类的主要方法有:(1)publicchargetKeyChar():返回被输入的字符;(2)publicStringgetKeyText():返回被按键的键码;(3)publicStringgetKeyModifiersText():返回修饰键的字符串。KeyListener接口对KeyEvent作监听处理,该接口中定义了3个方法:当一个键被按下和释放时调用keyPressed()方法和keyReleased()方法;当一个字符被输入时调用keyTyped()方法。上一页下一页返回任务5.3计算器事件处理
publicintgetKeyCode()方法返回与此事件中的键相关联的整数keyCode。KeyEvent类包含用于表示按下或单击键的常量键码。keyCode是每个按键的编码,通过JDK帮助文档可以查到每个按键对应的常量键码,如A对应的常量键码为VK_A。5.鼠标事件移动、单击、按下或释放鼠标会触发鼠标事件MouseEvent,鼠标事件对应两个接口:MouseListener和MouseMotionListener。MouseListener共有5个方法,主要用于实现鼠标的单击事件(用于处理组件上的鼠标按下、释放、单击、进入和离开事件),接口MouseListener中的方法为:(1)publicvoidmousePressed(MouseEvente):处理按下鼠标按键事件;上一页下一页返回任务5.3计算器事件处理
(2)publicvoidmouseClicked(MouseEvente):处理鼠标单击事件;(3)publicvoidmouseReleased(MouseEvente):处理鼠标按键释放事件;(4)publievoidmouseEntered(MouseEvente):处理鼠标进入当前窗口事件;(5)publicvoidmouseExited(MouseEvente):处理鼠标离开当前窗口事件。上一页下一页返回任务5.3计算器事件处理
接口MouseMotionListener中的两个方法为:(1)publicvoidmouseDragged(MouseEvente):处理鼠标拖动事件;(2)publicvoidmouseMoved(MouseEvente):处理鼠标移动事件。上述接口对应的注册监听器的方法是addMouseListener()和addMouseMotionListener()。上一页下一页返回任务5.3计算器事件处理
MouseEvent事件类中包括4个常用的方法:(1)intgetX():返回事件发生时,鼠标所在坐标x点;(2)intgetY();返回事件发生时,鼠标所在坐标y点;(3)intgetclickCount():返回事件发生时,鼠标的单击次数;(4)intgetButton():返回事件发生时,哪个鼠标按键更改了状态。上一页下一页返回任务5.3计算器事件处理
当鼠标在同一点被按下并释放(单击)时调用mouseClicked()方法;当鼠标进入一个组件时调用mouseEntered()方法;当鼠标离开组件时调用mouseExited()方法;当鼠标被按下和释放时调用相应的mousePressed()方法和mouseReleased()方法;当拖动鼠标时连续调用mouseDragged()方法;当移动鼠标时连续调用mouseMoved()方法。MouseEvent的特有方法intgetButton()用于获取鼠标按键信息,intgetX()和intgetY()方法用于获取鼠标坐标信息。按键常量定义BUTTON1、BUTTON2、BUTTON3分别代表鼠标的3个按键。上一页下一页返回任务5.3计算器事件处理
例如:上一页下一页返回任务5.3计算器事件处理
【任务实施】1.实施思路修改Calculator类定义使其实现ActionListener接口,在actionPerformed()方法中添加事件处理代码,并且为每个按钮添加当前Calculator类对象作为监听器。上一页下一页返回任务5.3计算器事件处理
在任务4.2的Calculator类的代码中作如下修改:(1)导入事件处理相关包“java.awt.event.∗”;(2)修改Calculator类使其实现接口ActionListener;(3)增加actionPerformed()方法,编写单击按钮处理代码,实现计算功能;(4)为每个按钮对象添加当前Calculator类对象(this)作为监听器。上一页下一页返回任务5.3计算器事件处理
2.程序代码上一页下一页返回任务5.3计算器事件处理
上一页下一页返回任务5.3计算器事件处理
【任务拓展】在应用程序开发中,除了使用MouseEvent、KeyEvent、WindowEvent等JDK已经定义好的事件类,Java还允许用户使用自定义事件。如果程序需要产生一个事件,但Java又没有定义该事件,这时就只能使用用户自定义事件了。例如开发一个邮件接收程序,程序收到邮件时需要产生“收到邮件”事件,“收到邮件”事件在Java中没有定义,这时只能使用自定义事件。完成上述任务的步骤如下:(1)继承EventObject类,定义自己的事件类MailEvent;(2)继承EventListener接口,定义自己的监听器接口MailEventListener;(3)在事件源,也就是邮件接收程序中添加addMailListener(MailEventListenerlis)方法。上一页下一页返回任务5.3计算器事件处理
【任务实训】1.实训目的(1)理解Java委托事件处理机制;(2)了解常用的事件类、处理事件的接口及接口中的方法;(3)掌握编写事件处理程序的基本方法;(4)熟练掌握ActionEvent事件的处理机制。2.实训内容利用JavaSwing技术设计一个Email邮件地址的图形用户界面应用程序,运行结果如图5-15所示。当用户输入完成后单击“立即注册”按钮,判断“密码”和“确认密码”文本框中的内容是否一致,如果一致,在“立即注册”按钮的上方显示用户输入的邮件地址,运行结果如图5-16所示。上一页返回任务5.4字体设置窗口程序设计
【任务目标】(1)熟练使用JCombox、JList控件;(2)熟练使用JCheckBox、JRadioButton控件;(3)掌握选择事件处理的应用。【任务陈述】设计一个简单的字体设置窗口程序,允许用户选择设置字体的种类、字号、字形、颜色等属性。任务运行结果如图5-17所示。下一页返回任务5.4字体设置窗口程序设计
【知识储备】5.4.1组合框JComboBox组合框(JComboBox)用于在多项选择中选择一项的操作,用户只能选择一个项目。在未选择组合框时,组合显示为带按钮的一个选项的形式,单击组合框按键,组合框会打开多项列表供用户选择。由于组合框占用最少的界面空间,因此,当项目较多时,通常用组合框代替一组单选按钮。组合框有可编辑和不可编辑两种形式,用户也可以在文本框中直接输入数据,缺省情况下组合框是不可编辑的。组合框事件包括ActionEvent事件和ItemEvent事件,事件处理方法与其他同类事件的处理方法类似。组合框的构造方法和常用方法见表5-7。上一页下一页返回任务5.4字体设置窗口程序设计
5.4.2复选框JCheckBox复选框(JCheckBox)是具有开关或真假状态的按钮,用户可以在组复选框中选中一个或者多个。JCheckBox类提供复选框的支持,单击复选框可更改其状态。复选框事件包括ActionEvent事件和ItemEvent事件。JCheckBox类可实现ItemListener监听器接口的itemStateChanged()方法用于处理复选框事件,而通过addItemListener()方法注册事件。复选框的构造方法和常用方法见表5-8。上一页下一页返回任务5.4字体设置窗口程序设计
5.4.3单选按钮JRadioButton单选按钮JRadioButton用于进行选择和取消选择,与复选框不同,每次只能选择一组单选按钮中的一个。JRadioButton类本身不具有同一时间内只有一个单选按钮对象被选中的性质,即JRadioButon类的每个对象都是独立的,不会因其他对象状态的改变而改变。因此,必须使用ButtonCroup类将所需的JRadioButton类对象构成一组,使同一时间内只有一个单选按钮对象被选中。只要通过ButtonGroup类对象调用add()方法,将所有JRadioButton类对象添加到ButtonGroup类对象中即可实现多选一。ButtonGroup类只是一个逻辑上的容器,并不在GUI中显示。单选按钮的选择事件是ActionEvent类事件。单选按钮的构造方法和常用方法见表5-9。上一页下一页返回任务5.4字体设置窗口程序设计
5.4.4列表框JList列表框JList是允许用户从一个列表中选择一项或多项的组件,便于用其显示一个数组或集合中的数据。列表框使用户易于操作大量的选项,列表框的所有项目都是可见的,如果选项超出了列表框可见区的范围,则列表框的旁边会有一个滚动条。列表框事件包括ListSelectionEvent事件和ItemEvent事件。列表框的构造方法和常用方法见表5-10。上一页下一页返回任务5.4字体设置窗口程序设计
5.4.5选择事件选择事件(ItemEvent)在JavaGUI中作为选择性控件的操作事件,如单击复选框、列表项,或当一个选择框、可选菜单项被选择或取消时生成的选项事件。选中或取消其中一项都会触发相应的选择事件。触发选择事件的组件比较多,如JComboBox、JCheckBox和JRadioButton组件。当用户在下拉列表、复选框和单选按钮中选择取消一项时,都会触发选择事件ItemEvent。当用户单击某个JRadioButton类对象时,可以产生一个ActionEven和一个或两个ItemEvent(一个来自被选中的对象,另一个来自之前被选中而现在未选中的对象),即JRadioButton类可以同时响应ItemEvent和ActionEvent事件。上一页下一页返回任务5.4字体设置窗口程序设计
通常,只需处理被用户单击的对象,所以使用ActionEvent处理JRadioButton类对象的事件。当用户单击某个JCheckBox类对象时也可以产生一个ItemEvent和一个ActionEvent事件。通常,需要判断JCheckBox类对象是否被选中,所以经常使用ItemEvent处理JCheckBox类对象的事件。当用户改变一个组件的状态时,会产生一个成多个ItemEven类事件。处理ItemnEvent类事件的步骤如下:上一页下一页返回任务5.4字体设置窗口程序设计
(1)用“importjava.awt.event.∗;”语句导入java.awt.event包中的所有类;(2)给程序的主类添加ItemListener接口;(3)将需要监听的组件注册,其格式为:对象名addItemdListener(this);(4)在itemStateChanged()方法中编写具体处理该事件的方法.其格式为:publicvoiditemStateChanged(ItemEvente){}。上一页下一页返回任务5.4字体设置窗口程序设计
在itemStateChanged()方法中,经常使用下面3种方法判断对象当前的状态:(1)getItem()方法:返回因为事件的产生而改变状态的对象,其返回类型为Object。通过if语句将getItem()依次与所有能改变状态的对象进行比较即可确定因为事件的产生而改变了状态的对象。(2)getItemSelectable()方法:返回产生事件的对象,其返回类型为Object。通过if语句将getItemSelectable()依次与所有能产生事件的对象进行比较即可确定用户单击的对象。getItemSelectable()方法的作用与getSource()方法完全一样。上一页下一页返回任务5.4字体设置窗口程序设计
(3)getStateChange()方法:返回产生事件对象的当前状态,其返回值包括ItemEvent.SELECTED和ItemEvent.DESELECTED。ItemEvent.SELECTED表示对象当前为选中状态,ItemEvent.DESELECTED表示对象当前为未选中状态。上一页下一页返回任务5.4字体设置窗口程序设计
【任务实施】1.实施思路界面中的字体颜色单选项和字形复选框分别通过JRadioButton和JCheckBox类进行创建并实现,字号选择通过JList类实现,字体选择通过JComboBox类实现。界面布局通过盒式布局嵌套实现,两个水平的盒子放在一个垂直的盒子中。上方水平的盒子中放JComboBox、JList、JCheckBox和JRadioButton对象,下方水平盒子里放文本区JTextArea对象和按钮对象。同时,实现ItemListener和ActionListener接口,处理单击按钮和选择控件的事件。上一页下一页返回任务5.4字体设置窗口程序设计
(1)定义FontSet类继承JFrame类并实现ItemListener和ActionListener接口;(2)通过JComboBox、JCheckBox、JRadioButtn等对象实现GUI界面设计;(3)为组件添加监听器;(4)为ItemListener和ActionListner接口添加事件处理代码;(5)编写main()方法测试程序。上一页下一页返回任务5.4字体设置窗口程序设计
2.程序代码上一页下一页返回任务5.4字体设置窗口程序设计
上一页下一页返回任务5.4字体设置窗口程序设计
上一页下一页返回任务5.4字体设置窗口程序设计
【任务拓展】GraphicsEnvironment类描述了Java应用程序在特定平台上可用的GraphicsDevice对象和Font对象的集合。GraphicsEnvironment中的资源可以是本地资源,也可以位于远程机器上。GraphicsDevice对象可以是屏幕,打印机或图像缓冲区,且都是Graphics2D绘图方法的目标。每个CraphicsDeVice都有许多与之相对应的GraphicsConfiguration对象,这些对象指定了使用GraphicsDevice所需的配置。下面是GraphicsEnviroment类的几个常用的方法:上一页下一页返回任务5.4字体设置窗口程序设计
(1)AbstractFont[]getAllFonts():返回一个数组,该数组包含此GraphicsEnvironment中所有可用字体的像素及实例。(2)AbstractString[]getAvailableFontFamilyNames():返回一个包含此GraphicsEnvironment中所有字体系列名称的数组,针对默认语言环境进行本地化,由Locale.getDefault()方法返回。(3)PointgetCenterPoint():返回Windows应居中的点。(4)RectanglegetMaximumWindowBounds():返回居中Windows的最大边界。(5)Font对象代表字体,JTextArea的setFont()方法可以设置文本区域的字体。上一页返回任务5.5字体设置菜单设计
【任务目标】(1)掌握使用JMenuBar、JMenu和JMenuItem构造应用程序菜单的方法;(2)掌握使用JPopupMenu构造应用程序弹出式菜单的方法;(3)能够处理鼠标事件。【任务陈述】本次任务将设计一个带有菜单的图形用户界面程序,使用级联菜单控制文字的字体和颜色。任务的运行结果如图5-18所示。下一页返回任务5.5字体设置菜单设计
【知识储备】真正的GUI应用程序缺少不了菜单,菜单可以给用户提供简明清晰的信息,让用户从多个项目中进行选择,而且可以节省界面空间。位于窗口顶部的菜单栏及其子菜单一般包括一个应用程序的所有方法和功能,是应用程序重要的组件。在程序中使用普通菜单的基本过程(图5-19):首先,创建一个菜单栏(JMenuBar),然后创建若干菜单项(JMenu),并把菜单项添加到菜单栏(JMenuBar)中;接着,创建若干个菜单子项(JMenuItem)或带有复选框的菜单子项(JCheckboxMenuItem),并把它们分类别添加到每个菜单项中;最后,通过JFrame类的setJMenuBar()方法将菜单栏(JMenuBar)添加到窗体上。上一页下一页返回任务5.5字体设置菜单设计
JCheckBoxMenuItem类用于创建复选菜单项,当选中复选框菜单子项时,在该菜单子项左边出现一个选择标记,如果再次单击该项,则该选择标记会消失。JRadioButtonMenuItem类用于创建单选菜单项,属于一组菜单项中的一项,该组菜单项中只能选择一项,被选择的项显示选择状态,选择某项的同时其他选项都切换到未选择状态。上一页下一页返回任务5.5字体设置菜单设计
5.5.1菜单栏(JMenuBar)JMenuBar是放置菜单的菜单栏,可通过newJMenuBar创建菜单栏对象,JMenuBar类的构造方法及常用方法见表5-11。以下代码给出了创建myJMenuBar并添加到JDialog中的方法:上一页下一页返回任务5.5字体设置菜单设计
5.5.2菜单项(JMenu)JMenu是菜单项对象,用newJMenu("文件")构造一个菜单项对象。例如:JMenumenu=newJMenu("文件(F)");//创建一个菜单项对象JMenu类的构造方法及常用方法见表5-12。5.5.3菜单子项(JMenuItem)JMenuItem是菜单子项类,通过newJMenultem(“菜单条目1”)方法构造一个菜单子项对象,其构造方法及常用方法见表5-13。上一页下一页返回任务5.5字体设置菜单设计
JMenultem类的使用示例代码如下:(1)JMenultemitem=newJMenultem("新建(N)",KeyEvent.VK_N);//创建带有指定文本和键盘助记符的JMenultem。(2)item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,ActionEvent.CTRLMASK));//设置修改键,它能直接调用菜//单项的操作侦听器而不必显示菜单的层次结构
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【智慧养老】养老社区智能环境安全风险分析与预警平台解决方案
- 单词词汇竞赛活动总结
- 2026智慧养老整体智能化系统汇报方案
- 2026年新高考全国卷生物易错概念押题卷含解析
- 2026年新课标II卷高考语文压轴题型集训卷含解析
- 2026年新高考化学押题模拟卷易错题训练(含解析)
- 步步高物流成本管控
- 水下钻井设备操作工创新实践模拟考核试卷含答案
- 角平分线的性质课件2025-2026学年八年级数学上册(湘教版)
- 轴承装配工操作评估能力考核试卷含答案
- 冬季防治高血压课件
- 面部徒手整容培训课件
- 电商公司积分管理制度
- 泛销售渠道管理制度
- 2025年陕西、山西、青海、宁夏高考物理试卷真题(含答案解析)
- 2025年全国统一高考数学试卷(全国一卷)含答案
- T/CECS 10214-2022钢面镁质复合风管
- 会计核算手册
- 水运工程工程量清单计价规范JTS-T+271-2020
- 2025春国家开放大学农产品电子商务-形考任务123参考答案
- 审计案例第2章审计风险评估案例
评论
0/150
提交评论