Java图形程序设计.ppt

上传人:max****ui 文档编号:6359961 上传时间:2020-02-23 格式:PPT 页数:76 大小:777.81KB
返回 下载 相关 举报
Java图形程序设计.ppt_第1页
第1页 / 共76页
Java图形程序设计.ppt_第2页
第2页 / 共76页
Java图形程序设计.ppt_第3页
第3页 / 共76页
点击查看更多>>
资源描述
学习内容 采用Swing编写窗口程序 如何在窗口中采用多种字体显示文本 如何显示图像 Java Swing概述 两种基本GUI 用户界面 程序设计类库AWT AbstractWindowToolkit 抽象窗口工具箱 对等体方法将处理用户界面元素的任务委派给每个目标平台的本地GUI工具箱 由本地GUI工具箱负责用户界面元素的创建和动作 一次编写 随处使用 一次编写 到处调试 换平台的时候界面会产生变化 Java Swing概述 两种基本GUI程序设计类库SWING 1996 Netscape创建了一种IFC InternetFoundationClass 的GUI库 它将菜单 按钮等用户界面元素绘制在空白窗口上 而对等体只需创建和绘制窗口 在所有平台上的外观和动作都一样 Sun和Netscape合作完善了这种方式 创建了一个名为Swing的用户界面库 Java Swing概述 两种基本GUI程序设计类库SWINGvs AWT swing利用程序本身进行绘制 SWING显示用户界面的元素的速度比AWT慢一些 SWING拥有一个丰富 便捷的用户界面元素集合 SWING对低层平台的依赖很少 因此与平台相关的bug很少 SWING给予不同平台的用户一致的感观效果 Java Swing概述 两种基本GUI程序设计类库SWINGvs AWT SWING显示用户界面的元素的速度比AWT慢一些 SWING拥有一个丰富 便捷的用户界面元素集合 SWING对低层平台的依赖很少 因此与平台相关的bug很少 SWING给予不同平台的用户一致的感观效果 SWING没有完全替代AWT 而是基于AWT架构之上 其提供了能力更加强大的用户界面组件 但还需要使用基本的AWT事件处理 对事件处理方式沿用了AWT方式 Java GUI基本组成 Java的图形用户界面的最基本组成成分是组件 组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象 例如一个按钮 一个标签 文本框 组件不能独立地显示出来 必须将组件放在一定的容器中才可以显示出来 容器 Container 实际上是Component的子类 因此容器本身也是一个组件 具有组件的所有性质 另外还具有容纳其他组件和容器的功能 组件不能脱离容器独立存在 如窗口就是一个容器 Java 创建框架 框架 frame 顶层窗口被称为框架Swing用JFrame类来表示框架 该类扩展于AWT的frame JFrame是极少数几个不绘制在画布上的Swing组件之一 其修饰部件 按钮 标题栏 图标等 由用户的窗口系统绘制 而不是由Swing绘制 组件命名前加了J一般为SWING编程方式 Java 创建框架 JFramejava lang Object java awt Component java awt Container java awt Window java awt Frame javax swing JFrame Java 创建框架 importjavax swing publicclassSimpleFrameTest publicstaticvoidmain String args SimpleFramesFrame newSimpleFrame sFrame setDefaultCloseOperation JFrame EXIT ON CLOSE 当窗体关闭的时候执行的动作 窗体关闭但是程序不退出sFrame setVisible true 使窗体可见 classSimpleFrameextendsJFrame publicSimpleFrame setSize DEFAULT WIDTH DEFAULT HEIGHT publicstaticintDEFAULT WIDTH 300 publicstaticintDEFAULT HEIGHT 200 Java 创建框架 框架 frame Java 创建框架 框架 frame 默认情况下 框架的大小为0 0象素 默认情况下 用户关闭窗口只是将框架隐藏了起来 程序并没有终止 构造一个框架并不自动显示 框架起初并不可见 所以需要用setVisible Java 框架设置 设置合适的框架大小 获得用户系统的基于像素的屏幕分辩率信息 然后利用这些信息计算最佳的窗口大小 获得用户系统的屏幕分辩率信息Toolkittk Toolkit getDefaultToolkit 因为是抽象类 所以不能用new实例化 可以用getDefaultToolkit返回Toolkit类的对象Dimensionds tk getScreenSize intwidth ds width inthight ds height Java 框架设置 例 将一个可关闭框架设置为 其大小是整个屏幕的二分之一 位于屏幕的中央 Java 框架设置 voidsetLocation x y 将框架放置在左上角水平x像素 垂直y像素的位置 坐标 0 0 位于屏幕的左上角 voidsetTitle Strings 设置框架的标题 voidsetIconImage Imagec 设置框架的图标 Java 框架设置 importjava awt importjava awt event importjavax swing publicclassCenteredFrameTest publicstaticvoidmain String args CenteredFramecf newCenteredFrame cf setDefaultCloseOperation JFrame EXIT ON CLOSE cf setVisible true Java 框架设置 classCenteredFrameextendsJFrame publicCenteredFrame Toolkittk Toolkit getDefaultToolkit Dimensionds tk getScreenSize intwidth ds width inthight ds height setSize width 2 hight 2 setLocation width 4 hight 4 Imageimg tk getImage icon gif setIconImage img setTitle CenteredFrame Java 框架设置 Java 面板与信息显示 如何在框架中显示文本信息 可以直接在框架中绘制信息 但这不是一种良好的编程习惯 框架在JAVA中是一个容器 用来放置其它组件 如 放置一个按钮 一个文本框等 通常在一个称为面板 panel 的组件上绘制信息 并将该面板添加到框架中 Java 面板与信息显示 如何在框架中添加一个面板 panel Java 面板与信息显示 Swing程序员关心的是内容窗格 可使用下面的代码将组件添加到内容窗格中 ContainercontentPane frame getContentPane Componentc new contentPane add c 在JDK5 0后 可直接调用JFrame add方法将组件添加到框架中 该方法实际上调用了内容窗格中的add方法frame add c 将面板 panel 的添加到框架中frame add panel Java 面板与信息显示 JPanel类包含一个可以用于绘图的表面 本身也是一个容器 为了能够在面板上进行绘图 需要进行定义一个扩展于JPanel的类在这个类中 覆盖paintComponent方法 Java 面板与信息显示 paintComponent方法该方法定义在JComponent类中 这个类是所有非窗口Swing组件的超类 该方法有一个Graphics类型的参数 通过该对象 可以进行绘制图案 图像和文本 程序员不用手工调用paintComponent方法 当应用程序需要绘图时 如窗口第一次出现 窗口大小调整等 事件处理器就会通告组件 使得paintComponent自动调用 Java 面板与信息显示 绘制文本通过Graphics类中的drawString方法可在面板上绘制文本g drawString text x y classNotHelloWorldPanelextendsJPanel publicvoidpaintComponent Graphicsg g drawString NotaHelloWorldProgram MESSAGE X MESSAGE Y publicstaticfinalintMESSAGE X 75 publicstaticfinalintMESSAGE Y 100 Java 面板与信息显示 绘制文本NotHelloWorldPanel类扩展了JPanel类 在填充面板的背景颜色时 JPanel类有自己的处理方式 为了确保超类完成自己的工作 必须在绘制自己的内容之前调用super paintComponent classNotHelloWorldPanelextendsJPanel publicvoidpaintComponent Graphicsg super paintComponent Java 面板与信息显示 importjava awt importjavax swing publicclassNotHelloWorldFrameTest publicstaticvoidmain String args NotHelloWorldFramef newNotHelloWorldFrame f setDefaultCloseOperation JFrame EXIT ON CLOSE f setVisible true Java 面板与信息显示 classNotHelloWorldFrameextendsJFrame publicNotHelloWorldFrame Toolkittk Toolkit getDefaultToolkit Dimensiondm tk getScreenSize intwidth dm width intheight dm height setSize width 2 height 2 setLocation width 4 height 4 Imageicon tk getImage icon gif setIconImage icon setTitle NotHelloWorldFrame add newNotHelloWorldPanel Java 面板与信息显示 classNotHelloWorldPanelextendsJPanel publicvoidpaintComponent Graphicsg super paintComponent g g drawString NotaHelloWorldProgram MESSAGE X MESSAGE Y publicstaticfinalintMESSAGE X 75 publicstaticfinalintMESSAGE Y 100 Java 面板与信息显示 Java 2D图形 图形绘制主要有两个类Graphics JDK1 0 绘制图形的能力有限 Graphics2D JDK1 2 Graphics的子类 绘制图形的能力强大 如果使用的是支持Java2D的版本 paintComponent方法可自动地获得一个Graphics2D类对象 只需进行一次类型转换publicvoidpaintComponent Graphicsg Graphics2Dg2 Graphics2D g Java 2D图形 常用的几何图形类Line2DRectangle2DEllipse2D 这些几何图形类实现了Shape接口绘制图形首先创建一个实现了Shape接口的类对象 调用Graphics2D类中的draw方法 Rectangle2Drect g2 draw rect Java 2D图形 Java2D图形类采用的是浮点坐标 每个图形类有两个版本 一个是为节省空间设置的float类型的坐标 另一个是double类型的坐标 例 Rectangle2D类有两个子类Rectangle2D FloatRectangle2D DoubleRectangle2D FloatfRect newRectangle2D Float 10 0f 25 0f 22 5f 20 0f Rectangle2D DoubledRect newRectangle2D Double 10 0 25 0 22 5 20 0 Java 2D图形 Rectangle2D Float和Rectangle2D Double均继承于Rectangle2D 并且子类只覆盖了Rectangle2D超类中的方法 故没有必要记住图形类型 可直接使用Rectangle2D变量保存矩形的引用 Rectangle2DfRect newRectangle2D Float 10 0f 25 0f 22 5f 20 0f Rectangle2DdRect newRectangle2D Double 10 0 25 0 22 5 20 0 对Rectangle2D的论述适用于其它所有的2D图形类 如Point2D也有两个子类Point2D Float和Point2D Double 子类也仅实现了父类的方法 可直接使用父类变量保存子类对象的引用 Java 2D图形 常用2D图形类abstractRectangularShape几何框架类图形的父类 publicdoublegetWidth publicdoublegetHeight publicdoublegetCenterX publicdoublegetCenterY Java 2D图形 常用2D图形类 Java 2D图形 常用2D图形类Rectangle2D DoubleRectangle2D Double doublex doubley doublew doubleh x y 矩形左上角的坐标 x y w 矩形宽度h 矩形高度Rectangle2D Double x y w h 0 Java 2D图形 常用2D图形类Rectangle2D Double如果已知两个矩形的两个对角点 也可以依此构造一个矩形 假设此两点的坐标分别为p px py q qx qy Rectangle2Drect newRectangle2D Double rect setFrameFromDiagonal px py qx qy 或rect setFrameFromDiagonal p q p q是用Point2D对象表示的两个对角点 publicvoidsetFrameFromDiagonal doublex1 doubley1 doublex2 doubley2 publicvoidsetFrameFromDiagonal Point2Dp1 Point2Dp2 Java 2D图形 常用2D图形类Ellipse2D DoubleEllipsee2D Double doublex doubley doublew doubleh x y 椭圆所在矩形外框左上角的坐标 x y w 椭圆所在矩形外框矩形宽度h 椭圆所在矩形外框矩形高度Ellipse2D Double 椭圆所在矩形外框为x y w h 0 Java 2D图形 常用2D图形类Ellipse2D Double通过椭圆中心点c centerX centerY 宽和高来构造一个椭圆 Ellipse2Dellipse newEllipse2D Double certerX width 2 centerY height 2 width height 通过椭圆中心点及外矩形框中四个顶点中的一个来构造椭圆 Ellipse2Dellipse newEllipse2D Double ellipse setFrameFromCenter centerX centerY concerX concerY 通过外矩形框来构造一个椭圆 Ellipse2Dellipse newEllipse2D Double ellipse setFrame rect Java 2D图形 常用2D图形类Line2D DoubleLine2D Double Line2D Double doublex1 doubley1 doublex2 doubley2 Line2D Double Point2Dp1 Poiont2Dp2 Java 2D图形 常用2D图形类Point2D DoublePoint2D Double Point2D Double doublex doubley Java 2D图形 绘制图形一个矩形这个矩形的内接椭圆矩形的一条对角线以矩形中心为圆心的一个圆 Java 2D图形 importjava awt importjava awt geom importjavax swing publicclassDrawTest publicstaticvoidmain String args DrawFramef newDrawFrame f setDefaultCloseOperation JFrame EXIT ON CLOSE 窗体关闭 程序退出f setVisible true Java 2D图形 classDrawFrameextendsJFrame publicDrawFrame Toolkittl Toolkit getDefaultToolkit Dimensionds tl getScreenSize intwidth ds width intheight ds height setSize 500 500 setLocation width 4 height 4 Imageicon tl getImage icon gif setIconImage icon setTitle Drawtest add newDrawPanel Java 2D图形 classDrawPanelextendsJPanel publicvoidpaintComponent Graphicsg super paintComponent g Graphics2Dg2 Graphics2D g intleftX 100 intleftY 120 intwidth 300 intheight 200 Rectangle2Drec newRectangle2D Double leftX leftY width height g2 draw rec 先构造图形 后调用draw方法Ellipse2Deps newEllipse2D Double eps setFrame rec g2 draw eps Java 2D图形 g2 draw newLine2D Double leftX leftY leftX width leftY height doublex eps getCenterX doubley eps getCenterY doubleradius 180 半径Ellipse2Dcircle newEllipse2D Double circle setFrameFromCenter x y x radius y radius g2 draw circle Java 2D图形 Java 颜色 Java awt Color类用于定义颜色类中提供了13个预定义的常量 分别表示13种标准颜色 通过类名加点直接加类变量直接调用 BLACKGREENREDBLUEWHITELIGHT GRAYCYAN 蓝绿 MAGENTA 品红 YELLOWDARK GRAYORANGEGRAYPINKColor REDColor GREEN Java 颜色 Java awt Color类用于定义颜色利用三原色 红 绿和蓝 来创建一个Color对象 三种颜色都是用 0 255 之间的数值来表示 publicColor intred intgreen ingblue Java 颜色 Graphics2D类的setPaint方法可以为图形环境上的所有后续的绘制操作选择颜色 绘制颜色的过程 选择颜色绘制图形g2 setPaint Color RED g2 drawString Warning 100 100 后两个数为坐标 voidsetPaint Paintp Color类实现了Paint接口 Java 颜色 设置组件的背景颜色和前景颜色Component类中的两个方法publicvoidsetBackground Colorc 先实例化颜色对象publicvoidsetForeground Colorc MyPanelp newMyPanel 实例化面板对象p setBackground Color PINK Java 颜色 填充图形可选用一种颜色 填充闭合图形的内部 调用Graphics2D的fill方法 publicvoidfill Shapes shape是接口 fill接收能实现接口的对象Rectangle2Drect g2 setpaint Color RED g2 fill rect Java 颜色 例 用红色填充一个矩形 并用暗绿色填充该矩形的内接椭圆 importjavax swing importjava awt importjava awt geom publicclassFillTest publicstaticvoidmain String args FillFramef newFillFrame f setDefaultCloseOperation JFrame EXIT ON CLOSE f setVisible true Java 颜色 classFillFrameextendsJFrame publicFillFrame this setTitle FillWindow setSize DEFAULT WIDTH DEFAULT HEIGHT setLocation 100 100 this add newFillPanel 将面板加到窗口上 publicstaticfinalintDEFAULT WIDTH 400 publicstaticfinalintDEFAULT HEIGHT 400 Java 颜色 classFillPanelextendsJPanel publicvoidpaintComponent Graphicsg super paintComponents g 方法重写需要调用父类Graphics2Dg2 Graphics2D g 对象转化doubleleftX 50 doubleleftY 50 doublewidth 260 doubleheight 200 Rectangle2Drec newRectangle2D Double leftX leftY width height g2 setPaint Color RED g2 fill rec 红色填充矩形Ellipse2Dese newEllipse2D Double ese setFrame rec 椭圆为内接椭圆g2 setPaint newColor 0 128 128 可以通过构造函数直接构造颜色对象g2 fill ese Java 颜色 Java 设置字体 java awt FontFont Stirngname intstyle intsize name 字体名 style 字体风格Font PLAIN 常规Font BOLD 粗体Font ITALIC 斜体Font BOLD Font ITALIC 粗体 斜体 size 字体大小 以点为单位 每英寸包含72个点Eg Fontserif14 newFont Serif Font BOLD 14 Java 设置字体 java awt Font字体名是指一台机器上所允许使用的字体的名字 不同的机器所支持的字体有所不同 列出机器上所允许的字体名调用GraphicsEnvironment类中的getAvailableFontFamilyNames方法 该方法返回一个字符型数组 包含了所有可用的字体名 GraphicsEnvironment类描述了用户系统的图形环境 可调用静态的getLocalGraphicsEnvironment方法得到该类的一个对象 Java 设置字体 importjava awt publicclassListFonts publicstaticvoidmain String args String fontsName GraphicsEnvironment getLocalGraphicsEnvironment getAvailableFontFamilyNames 先得到一个对象 在利用对象调用累出字体For Strings fontsName System out println s Java 设置字体 AlgerianArialArialBlackArialNarrowArialUnicodeMSBaskervilleOldFaceBatangBatangChe Java 设置字体 java awt FontJAVAAWT定义了五个逻辑 logical 字体名 SansSerifSerifMonospacedDialogDialogInput这五种字体会被映射到客户机上的实际字体 不同的机器映射方式可能不同 Java 设置字体 设置字符串位置获得描述字符串位置的矩形FontRenderContextcontext g2 getFontRenderContext 得到文字的环境变量Rectangle2Dbounds f getStringBounds message context 传入写入字符串和环境变量 Java 0 0 通过该矩形的getWidth 和getHeight 可以得到字符串所占的宽度和高度 该矩形的坐标原点在字符串的基线开始的地方 故通过getY 得到的是上坡度的负值 drawString s x y 方法中参数标识的点就是基线开始的点在屏幕中的坐标位置 设置字体 设置字符串位置设置字符串的位置 即是求得基准线起始点在屏幕中的坐标值 该值以屏幕左上角 0 0 为基准 Java x y x y bounds getY 设置字体 将字符串写在面板的中央FontRenderContextfrc g2 getFontRenderContext Rectangle2Drec f getStringBounds s frc rec包围字符串的矩形框doublex this getWidth rec getWidth 2 doubley this getHeight rec getHeight 2 doubleascent rec getY 上坡度的负值继续求负g2 drawString s int x int y ascent Java 设置字体 例 将字符串写在面板的中央importjava awt importjavax swing importjava awt geom importjava awt font publicclassFontTest publicstaticvoidmain String args FontFramef newFontFrame f setDefaultCloseOperation JFrame EXIT ON CLOSE f setVisible true Java 设置字体 例 将字符串写在面板的中央classFontFrameextendsJFrame publicFontFrame this setTitle FontWindow this setSize DEFAULT WIDTH DEFAULT HEIGHT this setLocation this getWidth 4 this getHeight 4 this add newFontPanel publicstaticfinalintDEFAULT WIDTH 300 publicstaticfinalintDEFAULT HEIGHT 200 Java 设置字体 例 将字符串写在面板的中央classFontPanelextendsJPanel publicvoidpaintComponent Graphicsg super paintComponent g Graphics2Dg2 Graphics2D g Strings newString HelloWorld angle Fontf newFont Serif Font BOLD Font ITALIC 30 g2 setFont f FontRenderContextfrc g2 getFontRenderContext Rectangle2Drec f getStringBounds s frc doublex this getWidth rec getWidth 2 doubley this getHeight rec getHeight 2 doubleascent rec getY g2 drawString s int x int y ascent Java 设置字体 例 将字符串写在面板的中央g2 setPaint Color GRAY g2 draw newLine2D Double x y ascent x rec getWidth y ascent 画基线g2 draw newRectangle2D Double x y rec getWidth rec getHeight Java 图像 读取图像文件表示图像文件的类java awt Image 抽象类java awt image BufferedImage 读图像Stringfilename Imageimage ImageIO read newFile filename Java 图像 显示图像java awt GraphicsbooleandrawImage Imageima intx inty imageObserverobserver XY坐标booleandrawImage Imageima intx inty intwidth intheight ImageObserverobserver 将对象按照设定大小显示组件上 压缩 拉伸 例 publicvoidpaintComponent Graphicsg g drawImage image x y null Java 图像 例 平铺显示图像importjavax swing importjava io importjava awt geom importjava awt importjavax imageio publicclassImageTest publicstaticvoidmain String args ImageFramef newImageFrame f setDefaultCloseOperation JFrame EXIT ON CLOSE f setVisible true Java 图像 例 平铺显示图像classImageFrameextendsJFrame publicImageFrame this setSize DEFAULT WIDTH DEFAULT HEIGHT this setTitle ImageWindow this add newImagePanel publicstaticfinalintDEFAULT WIDTH 400 publicstaticfinalintDEFAULT HEIGHT 300 Java 图像 例 平铺显示图像classImagePanelextendsJPanel publicImagePanel try ima ImageIO read newFile blue ball gif catch IOExceptione System out println e publicvoidpaintComponent Graphicsg super paintComponent g Graphics2Dg2 Graphics2D g if ima null return Java 图像 例 平铺显示图像intimageWidth ima getWidth this intimageHeight ima getHeight this g2 drawImage ima 0 0 null for inti 0 i imageWidth this getWidth i for intj 0 j imageHeight this getHeight j g2 copyArea 0 0 imageWidth imageHeight i imageWidth j imageHeight privateImageima Java 图像 Java 原图像 平铺后得到的图像 小结 Java 框架的显示 如何在窗体中绘制各类信息 文字 几何图形 图像 文本信息的显示 图形的绘制 颜色的设置 图象的绘制 作业 Java 尝试在窗体上画一张笑脸 利用ARC2D area两个弧线相减两个圆相减
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!