




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Core Java, Volume I (31) 图形程序设计 Part 1Java1.0包含了一个用于基本GUI程序设计的类库Abstract Window Toolkit,AWT。由于调用本地环境的工具箱,于是look and feel的效果依赖于平台。但是不甚合理加上Bug多多,于是从“一次编写,随处使用”蜕变到了“一次编写,到处调试”。Swing概述Sun和NetScape合作创建了一个名为Swing的用户界面库。目前Swing是不对等基于GUI工具箱的正式名字。它已是Java基础类库(Java Foundation Class,JFC)的一部分。Swing没有完全替代AWT,而是基于AWT架构之上。Swing编写的程序还需要AWT处理事件。Swing是指被绘制的非对称体用户界面类,AWT指像事件处理这样的窗口工具箱的低层机制。选择Swing的原因:Swing拥有一个丰富、便捷的用户界面元素集合。Swing对低层平台依赖的很少,因此与平台相关的bug很少。Swing给予不同平台的用户一致的感观效果。Java提供了“观感”,可以设定为本地环境的“观感”,此外Sun还开发了一种Metal观感,被称为Java观感。创建框架顶层窗口被称为框架frame,AWT中有个Frame类,Swing版本为JFrame。JFrame是极少数不绘制在画布上的Swing组件之一。/v1ch7SimpleFrameTest.javaimport javax.swing.*;public class SimpleFrameTest public static void main(String args) SimpleFrame frame = new SimpleFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); class SimpleFrame extends JFrame public SimpleFrame() setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); public static final int DEFAULT_WIDTH = 300; public static final int DEFAULT_HEIGHT = 200;frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)描述了关闭窗口的行为。如果程序包含多个框架,不能因为用户关闭了一个框架就全盘退出。frame.setVisible(true)框架起初是不可见的,这就给程序员一个机会,可以在框架第一次显示之前添加组件,添加好了再调用setVisible方法。随后,main方法退出。此时,并没有终止程序,终止的只是主线程。用户界面线程已经激活并运行了。这个图中看到的标题栏和外框装饰都是操作系统绘制的。JDK1.4中,可以调用frame.setUndecorated(true)关闭所有框架装饰。框架定位JFrame从超类中继承了许多用户处理框架大小和位置的方法:dispose 关闭窗口,回收创建窗口所使用的全部系统资源setIconImage 将窗口极小化时的图标设置为Image对象,又称图标化setTitle 用于改变标题栏中的文本setResizable 利用boolean值确定框架的大小是否允许用户改变ObjectComponent extends ObjectContainer extends ComponentJComponent extends ContainerJPanel extends JComponentWindow extends ContainerFrame extends WindowJFrame extends FrameComponent类中提供了setLocation(x, y),setBounds(x, y, width, height) 对框架来说,setLocation和setBounds中的坐标均相对于整个屏幕。容器中包含的其他组件,其坐标相对于容器。再给出一个示例程序,它将一个可关闭框架设置为大小是整个屏幕的四分之一位于屏幕的中央主要思想是调用Toolkit类的静态方法getDefaultToolkit得到Toolkit对象,然后与本地交互。此外还提供了一个图标。JDK1.4版本中,可以调用frame.setExtendedState(Frame.MAXIMIZED_BOTH)将框架设置为最大。如果编写一个利用多个显示屏幕的应用程序,可以使用GraphicsEnvironment和GraphicsDevice类获得显示屏幕的大小。JDK1.4中,GraphicsDevice类允许在全屏幕模式下运行应用程序。/v1ch7CenteredFrameTest.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;public class CenteredFrameTest public static void main(String args) CenteredFrame frame = new CenteredFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); class CenteredFrame extends JFrame public CenteredFrame() / get screen dimensions Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screenSize = kit.getScreenSize(); int screenHeight = screenSize.height; int screenWidth = screenSize.width; / center frame in screen setSize(screenWidth / 2, screenHeight / 2); setLocation(screenWidth / 4, screenHeight / 4); / set frame icon and title Image img = kit.getImage(icon.gif); setIconImage(img); setTitle(CenteredFrame); java.awt.Componentboolean isVisible() 检查组件是否设置为可见。组件最初是可见的,JFrame这种顶层组件除外。void setVisible(boolean b)boolean isShowing() 检查该组件是否显示在屏幕中。如果是,它必须是可见的,且包含在一个正在显示的容器中。boolean isEnabled() 检查组件是否被激活,被激活的组件可以接收键盘输入。void setEnabled(boolean b) 激活或者禁用组件Point getLocation() 返回组件左上角相对于外围容器左上角的位置。Point getLocationOnScreen()void setBounds(int x, int y, int width, int height) 移动并重置组件的大小void setLocation(int x, int y)/setLocation(Point p)Dimension getSize()void setSize(int width, int height)/setSize(Dimension d)java.awt.Windowvoid toFront() 将该窗口显示在其他窗口的前面void toBack() 将该窗口一到桌面窗口栈的后面并重新排列所有的可见窗口java.awt.Framevoid setResizable(boolean b)void setTitle(String s)void setIconImage(Image image)void setUndecorated(boolean b)boolean isUndecorated()int getExtendedState()/void setExtendedState(int state)state是这些值之一:Frame.NORMAL / Frame.ICONIFIED / Frame.MAXIMIZED_HORIZ / Frame.MAXIMIZED_VERT / Frame.MAXIMIZED_BOTHjava.awt.Toolkitstatic Toolkit getDefaultToolkit()Dimension getScreenSize()Image getImage(String filename)Part 2在面板中显示信息把消息字符串直接绘制在框架中不是一种良好的编程习惯。在Java中,框架被设计为放置组件的容器。一般我们在面板(panel)这种组件上放置信息,并且将这个面板添加到框架中。图中为JFrame的结构。我们只关心内容窗格,其他面板都用来组织菜单栏和内容窗格和实现观感的。Container contentPane = frame.getContentPane();Component c = .;contentPane.add(c);是jdk的内容窗格才能加入组件。但是JDK5.0之后,可以直接调用frame.add(c),JVM自动调用内容窗格的add;JPanel 包含一个可以绘图的表面;本身也是一个容器。为了使面板更加具有实用价值,应该通过继承来创建一个新类,然后覆盖或者添加一些方法来实现所需的附加功能。尤其重要的是:为了能够对面板上进行绘图,需要定义一个扩展于JPanel的类在这个类中,覆盖paintComponent方法实际上,paintComponent方法定义在JComponent类中,这个类是所有非窗口Swing组件的超类。该方法有一个Graphics类型的参数。Graphics对象保存着用于绘制图像和文本的设置,比如设置字体或者当前的颜色。在Java中所有的绘图都要通过Graphics对象,其中包含绘制图案,图像和文本。窗口需要重新绘图的时候,事件处理器就会通告组件,从而进发执行所有组件的paintComponent方法。一定不能自己调用paintComponent方法,在应用程序需要重新绘图的时候,这个方法将被自动调用。如果一定要强制刷新屏幕,就要调用repaint方法。它将引发采用相应配置的Graphics对象调用所有组件的paintComponent方法。显示文本是一种特殊的绘图。g.drawString(text, x, y);把text的开始位置也就是第一个字符放在(x, y)。/v1ch7NotHelloWorld.javaimport javax.swing.*;import java.awt.*;public class NotHelloWorld public static void main(String args) NotHelloWorldFrame frame = new NotHelloWorldFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); /* A frame that contains a message panel*/class NotHelloWorldFrame extends JFrame public NotHelloWorldFrame() setTitle(NotHelloWorld); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); / add panel to frame NotHelloWorldPanel panel = new NotHelloWorldPanel(); add(panel); public static final int DEFAULT_WIDTH = 300; public static final int DEFAULT_HEIGHT = 200; /* A panel that displays a message. */class NotHelloWorldPanel extends JPanel public void paintComponent(Graphics g) super.paintComponent(g); g.drawString(Not a Hello, World program, MESSAGE_X, MESSAGE_Y); public static final int MESSAGE_X = 75; public static final int MESSAGE_Y = 100;javax.swing.JFrameContainer getContentPane()void add(Component c)ponentvoid paint() “尽可能快地”重新绘制组件public void repaint(int x, int y, int width, int height) “尽可能快地”重新绘制组件的一部分java.swing.JComponentvoid paintComponent(Graphics g)Part 32D图形JDK1.2引入Java 2D库,这个库实现了一组功能强大的图形操作,这个库实现了一组功能强大的图形操作。要想使用Java2D库绘制图形,需要获得一个Graphics2D对象。这个对象其实已经获得,只是需要进行一下类型转换而已。public void paintComponent(Graphics g) Graphics g2 = (Graphics2D)g; .Java 2D库采用面向对象的方式将几何图形组合起来。包含描述直线、矩形的椭圆的类:Line2D,Rectangle2D,Ellipse2D,这些类全部实现了Shape接口。要想绘制图形,需要这样:Rectangle2D rect = .;g2.draw(rect);使用Java 2D图形类可能增加一些复杂度。Graphics的绘制方法中采用的是整型像素坐标,但是Java 2D图形采用的是浮点坐标。注意float类型的赋值:float f = 1.2F;(必须加f,否则不能通过编译)Rectangle2D r = .;float f = (float) r.getWidth(); /r.getWidth()返回double由于后缀和类型转换比较麻烦,所以2D的设计者决定为每个图形类提供两个版本:一个是float型,一个是double型。这个类的设计者选择了一种看起来古怪又混乱的方式进行了打包。比如Rectangle2D类,这是一个拥有两个具体子类的抽象类,它两个具体子类都是静态内部类:Rectangle2D.FloatRectangle2D.Double这样做的目的只是为了避免引入FloatRectangle2D这样的类名。当创建一个Rectangle2D.Float对象的时候,应该提供float类型数值的坐标。对Rectange2D.Double也是如此:Rectangle2D.Float floatRect = new Rectangle2D.Float(10.0F, 25.0F, 22.5F, 20.0F);但是更推荐这样使用:Rectangle2D floatRect = new Rectangle2D.Float(10.0F, 25.0F, 22.5F, 20.0F);只在构造图形对象时,才需要使用烦人的内部类。虽然Rectangle2D.float还有个setRect(float,float,float,float)方法是不是继承来的,不声明为Rectangle2D.Float对象就会失去这个方法,但是我们无所谓的,因为Rectangle2D有个setRect(double,double,double,double)方法。类似的还有Point2D类,他也有两个子类Point2D.Float, Point2D.Double。很多构造器和方法都接收Point2D型的参数。我们推荐它。Point extends Point2DLine2D extends ShapeRectangularShape extends ShapeEllipse2D extends RectangularShapeRectangle2D extends RectangularShapeRectangle extends Rectangle2DRectangle2D和Ellipse2D对象很容易构造,需要给出左上角的x和y坐标,宽度和高度。对于椭圆,这代表它的外接矩形。如果不知道左上角的位置,只知道两个对角点,不能用new Rectangle2D.Double(px, py, qx-px, qy-py);来构造因为如果p不是左上角,哪么两个坐标之差为负,矩形为空。这是可以这样做:Rectangle2D rect = new Rectangle2D.Double();rect.setFrameFromDiagonal(px,py,qx,qy);或者rect.setFrameFromDiagonal(p,q);/Point2D p, Point2D qLine2D line = new Line2D.Double(start, end);Line2D line = new Line2D.Double(startX, startY, endX, endY);/v1ch7DrawTest.javaimport java.awt.*;import java.awt.geom.*;import javax.swing.*;public class DrawTest public static void main(String args) DrawFrame frame = new DrawFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); /* A frame that contains a panel with drawings*/class DrawFrame extends JFrame public DrawFrame() setTitle(DrawTest); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); / add panel to frame DrawPanel panel = new DrawPanel(); add(panel); public static final int DEFAULT_WIDTH = 400; public static final int DEFAULT_HEIGHT = 400; /* A panel that displays rectangles and ellipses. */class DrawPanel extends JPanel public void paintComponent(Graphics g) super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; / draw a rectangle double leftX = 100; double topY = 100; double width = 200; double height = 150; Rectangle2D rect = new Rectangle2D.Double(leftX, topY, width, height); g2.draw(rect); / draw the enclosed ellipse Ellipse2D ellipse = new Ellipse2D.Double(); ellipse.setFrame(rect); g2.draw(ellipse); / draw a diagonal line g2.draw(new Line2D.Double(leftX, topY, leftX + width, topY + height); / draw a circle with the same center double centerX = rect.getCenterX(); double centerY = rect.getCenterY(); double radius = 150; Ellipse2D circle = new Ellipse2D.Double(); circle.setFrameFromCenter(centerX, centerY, centerX + radius, centerY + radius); g2.draw(circle); java.awt.geom.RectangularShapedouble getCenterX()/getCenterY()double getMinX()/getMinY()double getMaxX()/getMaxY()double getWidth()/getHeight()double getX()/getY()返回闭合矩形左上角的x,y坐标java.awt.geom.Rectangle2D.DoubleRectangle2D.Double(double x, double y, double width, double height)java.awt.geom.Rectangle2D.FloatRectangle2D.Float(float x, float y, float width, float height)java.awt.geom.Ellipse2D.DoubleEllipse2D.Double(double x, double y, double width, double height)java.awt.geom.Point2D.DoublePoint2D.Double(double x, double y)java.awt.geom.Line2D.DoubleLine2D.Double(Point2D start, Point2D end)Line2D.Double(double startX, double startY, double endX, double endY)Part 4使用Graphics2D类的setPaint方法可以为图形环境上所有后续的绘制操作选择颜色。Color类用于定义颜色,在java.awt.Color类中提供了13个预定义的常量,分别表示13中标准颜色:BlACK GREEN RED BLUE LIGHT_GRAY WHITE CYAN MEGENTA YELLOW DARK_GRAY ORANGE GRAY PINK例如:g2.setPaint(Color.RED);g2.drawString(Warning!, 100, 100);可以通过提供RGB值创建一个Color对象,以达到定制颜色的目的。三种颜色都是用0-255之间的整型值表示。构造函数格式为:Color(int redness, int greenness, int blueness)比如:g2.setPaint(new Color(0,128,128);g2.drawString(.);如果是Graphics对象,就要用g.setColor(.)方法来设置颜色。要设置背景颜色,就要使用Component类中的setBackground方法。MyPanel p = new MyPanel();p.setBackground(Color.PINK);另外还有一个setForeground方法,他是用来设定在组件上绘制时使用的默认颜色。Color类还有brighter()/darker(),分别加亮和变暗当前的颜色。实际上,brighter()效果不明显,如果要达到耀眼的效果,应该连续调用三次:c.brighter().brighter().brighter();Java在SystemColor类中预定义很多颜色的名字。在这个类的常量,封装了用户系统的各种元素的颜色,例如p.setBackground(SystemColor.window)把面板的背景颜色设定为用户桌面上所有窗口使用的默认颜色。java.awt.ColorColor(int r, int g, int b)java.awt.Graphics2Dvoid setPaint(Paint p)设置这个图形环境的绘制属性。Color类实现了Paint接口。java.awt.Componentvoid setBackground(Color c)/setForeground(Color c)填充图形可以选一种颜色填充闭合图形的内部。要想填充图形,只需要将draw替换为fill就可以了。Rectangle2D rect = .;g2.setPaint(Color.RED);g2.fill(rect);/v1ch7FillTest.javaimport java.awt.*;import java.awt.geom.*;import javax.swing.*;public class FillTest public static void main(String args) FillFrame frame = new FillFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); /* A frame that contains a panel with drawings*/class FillFrame extends JFrame public FillFrame() setTitle(FillTest); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); / add panel to frame FillPanel panel = new FillPanel(); add(panel); public static final int DEFAULT_WIDTH = 400; public static final int DEFAULT_HEIGHT = 400; /* A panel that displays filled rectangles and ellipses */class FillPanel extends JPanel public void paintComponent(Graphics g) super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; / draw a rectangle double leftX = 100; double topY = 100; double width = 200; double height = 150; Rectangle2D rect = new Rectangle2D.Double(leftX, topY, width, height); g2.setPaint(Color.RED); g2.fill(rect); / draw the enclosed ellipse Ellipse2D ellipse = new Ellipse2D.Double(); ellipse.setFrame(rect); g2.setPaint(new Color(0, 128, 128); / a dull blue-green g2.fill(ellipse); Part 5字体可以通过一个字体名(font face name)指定一种字体。字体名由Helvetica这样的字体家族名(font family name)和一个可选的Bold后缀组成。例如Helvetica和Helvetica Bold属于Helvetica家族的字体。要想知道某台特定计算机上所允许使用的字体,就需要调用Graphics Environment类中的getAvailableFontFamilyNames方法,这个方法将返回一个String型数组,其中包含了所有可用的字体名。GraphicsEnvironment类描述了用户系统的图形环境,为了得到这个类的对象,需要调用静态的getLocalGraphicsEnvironment方法。下列的程序将打印出系统上所有字体名:/v1ch7ListFonts.javaimport java.awt.*;public class ListFonts public static void main(String args) String fontNames = GraphicsEnvironment .getLocalGraphicsEnvironment() .getAvailableFontFamilyNames(); for (String fontName : fontNames) System.out.println(fontName); 无法知道用户是否安装了某种特定外观的字体。此外,一些字体还有仿制品。为了创建一个公共基准,AWT定义了5个落体字体名:SansSerif, serif, Monospaced, Dialog, DialogInput。这些字体将被映射到客户机上的实际字体。比如在Windows系统中,SansSerif将被映射到Arial上。要想使用某种字体绘制字符,必须首先利用指定的字体名、字体风格和字体大小来创建一个Font类对象。下面是构造一个Font对象的例子: Font helvb14 = new Font(Helvetica, Font.BOLD, 14);Font构造器中,第一个参数提供字体名,可以用逻辑字体。另外第二个参数可以指定字体的风格(常规,加粗,斜体,加粗斜体),下面是几个字体风格的值:Font.PLAIN, Font.BOLD, Font.ITALIC, Font.BOLD + Font.ITALICJDK1.3开始,可以读取TrueType字体,这需要一个字体输入流,可以从文件或者URL读取,最后调用静态方法Font.createFont:URL url = new URL(.Wingbats.ttf);InputStream in = url.openStream();Font f = Font.createFont(Font.TRUERYPE_FONT, in);上面定义的字体是常规字体,大小为1。可以使用deriveFont方法定义字体的大小:Font df = f.deriveFont(14.0F);deriveFont(float f) 设置字体大小deriveFont(int i) 设置字体风格 /deriveFont(14)设置风格为斜体我们希望把字符串绘制在面板的中央,怎么办?需要知道字符串占据的宽和高的像素数量,这取决于这些:使用的字体字符串绘制字体的设备要想得到屏幕设备字体属性的描述对象,需要调用Graphics2D类的getFontRenderContext方法,返回FontRenderContext类对象,可以直接把这个对象传递给Font类的getStringBounds方法:FontRenderContext context = g2.getFontRenderContext();Rectangle2D bounds = f.getStringBounds(message, context);为了解释这个矩形,需要清楚几个术语。基线(baseline)是一条虚构的线。上坡度(ascent)是从基线到坡顶(ascenter)的距离。下坡度是从基线到坡底的距离。行间距(leading)是某一行的坡底与其下一行的坡顶之间的空隙。字体的高度是连续两个基线的距离,它等于下坡度+行间距+上坡度。getStringBounds方法返回的举行宽度是字符串水平方向的宽度。矩形的高度是上坡度、下坡度、行间距的总和。该矩形始于字符串的基线,矩形顶部的y坐标为负值。因此,可以采用下面的方法获得字符串的宽度、高度和上坡度。double stringWidth = bounds.getWidth();double stringHeight = bounds.getHeight();double ascent = -bounds.getY();如果需要知道下坡度或行间距,可以使用Font类的getLineMetrics方法。这个方法将返回一个LineMetrics类对象,获得下坡度和行间距的方法是:LineMetrics metrics = f.getLineMetrics(message, context);float descent = metrics.getDescent();float leading = metrics.getLeading();这个代码使用了这些信息可以把字符串显示在包围它的面板中央:FontRenderContext context = g2.getFontRenderContext();Rectangle2D bounds = f.getStringBounds(message, context);/(x, y) = top left corner of textdouble x = (getWidth() - bounds.getWidth()/2;double y = (getHeight() - bounds.getHeight()/2;double ascent = -bounds.getY();double baseY = y + ascent;g2.drawString(message, (int)x, (int)baseY);java.awt.FontFont(String name, int style, int size) name 字体名或者逻辑字体名 style 字体风格 size 字体大小String getFontName() 返回字体名String getFamily() 返回字体家族名String getName() 返回字体名。如果创建时候使用了逻辑字体,就返回逻辑名Rectangle2D getStringBounds(String s, FontRenderContext context)LineMetrics getLineMetrics(String s, FontRenderContext context)Font deriveFont(int style)Font deriveFont(float size)Font deriveFont(int style, float size)java.awt.font.LineMetricsfloat getAscent() 上坡度float getDescent() 下坡度float getLeading() 行间距从一行文本底端到下一行文本顶端之间的空隙float getHeight() 返回字体的总高度,两条基线的距离 下坡度+行间距+上坡度java.awt.Graphicsvoid setFont(Font font)void drawString(String str, int x, int y)java.awt.Graphics2DFontRenderContext setRenderContext()void drawString(String str, int x, int y)/v1ch7FontTest.javaimport java.awt.*;import java.awt.font.*;import java.awt.geom.*;import javax.swing.*;public class FontTest public static void main(String args) FontFrame frame = new FontFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); /* A frame with a text message panel*/class FontFrame extends JFrame public FontFrame() setTitle(FontTest); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); / add panel to frame FontPanel panel = new FontPanel(); add(panel); public static final int DEFAULT_WIDTH = 300; public static final int DEFAULT_HEIGHT = 200; /* A panel that shows a centered message in a box.*/class FontPanel extends JPanel public void paintComponent(Graphics g) super.paintComponent(g); Graphics2D g2 = (
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑水电施工合同格式
- 酒店内部管理培训课件
- 煤矿安全培训考核出题课件
- 煤矿安全培训综合考评课件
- 健身记录加密存储-洞察及研究
- 粉矿烧结工培训考核试卷及答案
- 医疗器械不良事件培训试题及答案
- 2025年护理专业笔试题及答案
- 屋面工程施工方案
- 2025年抢救技能考试题及答案
- 2025-2026学年地质版(2024)小学体育与健康三年级(全一册)教学设计(附目录P123)
- 2025年湖南郴州市北湖区引进高层次人才和招聘事业单位工作人员28人备考练习题库及答案解析
- 麻醉深度监测-洞察及研究
- 2025年口腔修复学笔试题及答案
- 桥梁养护应急知识培训课件
- 2025-2026学年人教版(2024)初中化学九年级上册教学计划及进度表
- 智能化硬件基础知识培训课件
- 2025年小学生国学知识竞赛试题库附答案
- 水上服务区(加油站)项目可行性研究报告
- 浙江国企招聘2025浙江省储备粮管理集团有限公司所属企业招聘7人(第一批)笔试参考题库附带答案详解(10套)
- 儿童出血性疾病诊疗规范
评论
0/150
提交评论