版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章图形编程4.1AWT与Swing简介一.AWT工具包java的抽象窗口工具包(AWT:AbstractwindowInterface)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类基本AWT库处理用户界面元素的方法是把这些元素的创建和行为委托给每个目标平台上的本地GUI工具箱进行处理AWT的层次关系EventComponentGraphicsMenuComponButtonScrollBarContainerCanvasListCheckBoxLabelTextFieldTextAreaWindowFrameDialogFontAppletPanel二.JavaSwingSwing:非基于对等体的GUI工具箱Swing具有更丰富并且更方便的用户界面元素集合Swing对底层平台的依赖更少Swing会带来交叉平台上的统一视觉体验Swing类被放在javax.Swing包上Swing组件层次关系ComponemtContainerWindowFrameDialogJFrameJDialogJComponentJPanelJLabelJScrollerJMenuBarJButtonJtext..三.AWT与Swing的关系对于使用过Java早期版本的人来说,大部分AWT组件都有其Swing等价物后者的名字一般是在前面添加一个字母“J”,如:JButton,JFrame,JPanel等4.2组件和容器一.组件Java把由Component类的子类或间接子类创建的对象称为一个组件例:Buttonbutton1=newButton();例:TextFieldtextfield=newTextField();例:Labellabel=newLabel();二.容器Java把由container类的子类或间接子类创建的对象称为一个容器例:Framefra=newFrame(“这是一个窗口”);Applet是Panel的子类,是Container的间接子类Applet本身也是一个容器三.添加组件Component类提供了一个方法:add();例:fra.add(button);例:fra.add(TextField);容器本身也可以看作是一个组件,因此可以把一个容器添加到另一个容器里,实现容器嵌套例:add(fra);四。布局管理器Java采用非常优秀的概念来进行布局一个容器内的所有组件都由一个布局管理器来进行管理Java支持以下四种布局管理器FlowLayoutBorderLayoutCardLayoutGridBagLayout五.常用容器1.框架在Java中,顶层窗口(没有包含在另一个窗口内的窗口)称为框架AWT库中有一个基于对等体的Frame类对应着顶层该类的Swing版本为JFrame,JFrame是Frame子类例:框架是容器的例子SimpleFrameTest.java
importjavax.swing.*;publicclassSimpleFrameTest{publicstaticvoidmain(String[]args){
SimpleFramemyframe=newSimpleFrame();myframe.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);myframe.show();
}}classSimpleFrameextendsJFrame{publicSimpleFrame(){setSize(WIDTH,HEIGHT);}publicstaticfinalintWIDTH=300;publicstaticfinalintHEIGHT=200;}2.定义相对框架通过调用toolkit来得到系统相关信息例:获得屏幕尺寸Toolkitkit=Toolkit.getDefaultToolkit();DimensionscreenSize=kit.getScreenSize();intscreenHeight=screenSize.height;intscreenWidth=screenSize.width;例:CenteredFrameTest.java3.常见类及方法APIjava.awt.ComponentbooleanisVisible()检查组件是否可见voidsetVisible(booleanb)设置组件可见voidsetBounds(intx,inty,intwidth,intheight)移动并缩放组件DimensiongetSize()得到组件的大小voidsetSize(intwidth,intheight)voidsetSize(Dimensiond)把组件缩放到指定调度和宽度
java.awt.windowvoidtoFrond()放在其它窗口前面voidtoBack()放在其它窗口后面java.awt.FramevoidsetResizable(booleanb)缩放框架voidsetTitle(Strings)设置标题voidsetIconImage(Imageimage)将Image用作图标java.awt.Toolkit
DimensiongetScreenSize()得到用户屏幕大小六.显示信息前面的例子中,信息都显示在控制台窗口,现在我们试着把信息显示到JFrame中JFrame的结构有点复杂,它由:根窗格、布局窗格、透明窗格和内容窗格在AWT中可调用add()把组件直接添加到AWTFrame中,但在Swing中组件只能添加到内容窗格里内容窗格是用来添加组件的,获得内容窗格的代码如下:
Containercp=getContentPane();Componentc=…;cp.add(c);用户也可以创建一个画板,然后在画板上进行绘制时,最后将画板添加到内容窗格里,此时需要重载paintComponent()paintComponent(Graphicsg)是定义在JComponent中,每当该方法被调用时,系统就自动产生一个Graphics类型的参数,传递给paintComponent方法中的参数gGraphics类提供绘制图像和输出文本的方法创建一个画板classMyPanelextendsJPanel{publicvoidpaintComponent(Graphicsg){
super.paintComponent(Graphicsg)
g.drawString(“Hello!world”)….}}MyPanel扩展了JPanel,但面板的背景颜色等工作要由Jpanel来完成,super.paintComponent确保父类也参预绘制只要窗口重新绘制,paintComponent()就被自动调用(在AWT中上paint())例.在画板上输出信息NotHelloWorld.java常用APIjavax.swing.JFrameContainergetContentPane()返回JFrame的内容窗格java.awt.Componentvoidrepain()重新绘制组件voidrepaint(intx,inty,intwidth,intheight)重新绘制组件的一部分javax.swing.JcomponentvoidpaintComponent(Graphicsg)需要重写该方法来说明你的组件应如何绘制4.3图形编程一.2D图形1.2D对象随着SDK2.0版的到来,J2SE了包含一个Java2D库,该库实现了一个非常强大的图形操作集如何获得Graphics2D类对象该类是Graphics类的子类,通常可用Graphics对象转换而来.例:publicvoidpaintComponent(Graphicsg){graphics2Dg2=(graphics2D)g;…..}2.坐标JDK1.0版中使用整数像素坐标系java2D形体使用浮点数坐标系,这样可为坐标指定单位。存在的问题:Retangle2Dr=……….;floatf=r.getWidth();/*Error*/getWidth()返回double值,应进行转换:floatf=(float)r.getWidth();因此,2D库的形体类有两种版本:Retangle2D.FloatRetangle2D.Double例:DrwaTest.java3.常用APIjava.awt.geom.Retangle2D.DoubleRetangle2D.Float(floatx,floaty,floatwidth,floatheight)Ellipse2D.Double(doublex,doubley,doublewidth,doubleheight)java.awt.geom.Ellipse2D.DoubleRetangle2D.Double(doublex,doubley,doublewidth,doubleheight)java.awt.geom.Retangle2D.Floatjava.awt.geom.Line2D.DoubleLine2D.double(Point2Dstart,Point2Dend)Line2D.double(doublestartx,double
starty,doubleendx,double
endy)java.awt.geom.Point2D.DoublePoint2D.Double(doublex,doubley)fill(Graphics2Drec)填充颜色Draw(Graphics2Drec)绘制图形rec二.颜色Graphics2D类的setPaint方法(Graphics类为setColor方法)用来设置颜色。例:g2.setPaint(Color.red);g2.drawString(“SetColor”,100,100)1.标准颜色black、blue、cyan、darkgray、gray、green、lightgray、magenta、orange、pink、red、white、yellow2.复合色通过指定红绿蓝三色比例,用Color对象来复合成一种新的颜色。Color构造器如下:Color(intredness,intgreenness,intblueness)其中参数取值为0--255例:g.setPaint(newColor(0,128,128));3.常用APIjava.awt.ColorvoidColor(intr,intg,intb)
java.awt.Graphicsvoidsetcolor(Colorc)java.awt.Graphic2DvoidsetPaint(paintp)java.awt.CmponentvoidsetBackground(Colorc)voidsetForeground(Colorc)例:填充颜色的例子FillTest.java三.文本和字体1.五个逻辑字体名SanaSerifSerifMonospacedDialogDialogInput2.字体风格Font.PLAINFont.BOLDFond.ITALICFond.BOLD+Font.ITALIC3.设置字体Fontserif=newFont(“Serif”,Font.BOLD,14);g2.setFont(serif);4.编程控制字体字符输出的效果取决于下面三个因素:使用的字体字符串绘制字体的设备几个基本术语:
上坡度下坡度空行基线基线高度调用Graphics2D类中的getFontRenderContext方法,可获得一个FontRenderContext类的对象,再将该对象Fond类的getStringBounds方法,该方法返回一个包围字符串的矩形.代码如下:Stringmessage=“Hello,World!”;Fontf=newFoun(“serif”,Font.BOLD,14);FontRenderContextcontext=g2.getFontRenderContext();Retangle2Dbounds=f.getStringBounds(message,context);获得字符串宽度、高度、上坡度、下坡度的方法如下:doublestringwidth=bounds.getWidth();doublestringheigth=bounds.getHeigth();doubleascent=-bounds.getY();doubledescent=bounds.getHeigth()+bounds.getY();将字符串显示在面板中央的代码如下:Stringmessage=“Hello,World!”;Fontf=newFoun(“serif”,Font.BOLD,14);FontRenderContextcontext=g2.getFontRenderContext();Retangle2Dbounds=f.getStringBounds(message,context);doublex=(getWidth()-bounds.getWidth())/2;doubley=(getHeigth()-bounds.getWidth())/2;doubleascent=-bounds.getY();doublebasey=y+ascent;g2.drawString(message,(int)x,(int)basey);例:将字符串显示在画板中央的例子FontTest.javaAPI:java.awt.FontFont(Stringname,intstyle,intSize)StringgetFontName()StringgetFamily()StringgetName()Retangle2DgetStringBounds(Strings,FountRenderContextcontext)java.awt.font.LineMetricsfloatgetAscent()floatgetDecent()floatgetHeight()floatgetWeight()java.awt.GraphicsvoidsetFont(Fontfont)voidDrawString(Stringstr,intx,inty)
四.图象在Java应用程序中须通过使用Toolkit对象,调用getDefaultToolkit(),完成将一个图象文件加载到程序中,再调用Graphics类提供的DrawImage()显示它。目前只能读取gif和JPEG格式的文件下面一段代码用来在本地机上加载一个名为msn.jpg的文件:Imageimg=ToolkitgetDefaultToolkit().getImage(“msn.jpg”)若从网络上加载,必须提供URL例:URLu=newURL(“/animage.jpg”);Imageimg=ToolkitgetDefaultToolkit().getImage(u)显示代码:publicvoidpaintComponent(Graphicsg){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甘油磷酸盐产业深度调研及未来发展现状趋势
- 触摸屏产业深度调研及未来发展现状趋势
- 2025届北京海淀高三下学期一模考试数学试题含解析
- 环形搓丝板市场洞察报告
- 2024年运动服饰项目申请报告
- 2024年度国家级档案馆数字化布线合同
- 2024年度体育赛事赞助合同:甲方作为赛事主办方乙方作为赞助商就赛事赞助、广告宣传等事项达成一致
- 2024年度校园广播站经营权转让合同
- 2024年度环保设备采购与污染治理合同
- 2024年带导向螺旋合金铰刀项目可行性研究报告
- 小学六年级数学100道题解分数方程
- 保洁服务应急响应能力预案
- 红外耳温计黑体校准规范
- 危重症患者护理与评估
- 教育管理与案例分析
- 危险化学品仓储智能化管理系统
- 消化内镜健康宣教课件
- 铁道运输职业生涯规划书
- 天津美术馆分析报告
- 导电油墨可行性报告
- 《PLC技术基础、PLC技术及应用》期末考试B卷
评论
0/150
提交评论