JAVA---AWT 图形绘制 朴灿烈づ我的快乐病毒、 2022-01-06 14:45 318阅读 0赞 # 转自:[http://blog.sina.com.cn/s/blog\_4c7656e6010007tn.html][http_blog.sina.com.cn_s_blog_4c7656e6010007tn.html] # # [无色天空][Link 1] # # 1.Awt简介 # **1)****图形用户界面(GUI)****可以通过键盘或鼠标来响应用户的操作。** **2)****抽象窗口工具包(AWT)****是一组Java****类,此组Java****类允许创建图形用户界面(GUI)****。** **3)****AWT****提供用于创建生动而高效的GUI****的各种组件。** [![JAVA--AWP][]][JAVA--AWP 1] ## 2.创建GUI ## ### 1)容器(container) ### **A.****可以存放组件的区域,可在容器上进行绘制和着色** **B.****java.awt****包中的Container****类可直接或间接派生出两个常用容器:框架(Frame****类)和面板(Panel****类)。** **C.****框架是一个带有边框的独立的窗口。** **D.****面板是包含在窗口中的一个不带边框的区域。** ### 2)框架(Frame) ### **A.****框架是独立于Applet****和浏览器的一个窗口。** **B.****可以通过以下任一构造函数来创建:** **C.****Frame():****创建一个不含标题的标准窗口** **D.****Frame(String Title):** **创建一个含有标题的窗口,这个标题是由参数title****指定的。** E.**当一个Frame****窗口被创建以后,需要调用setSize()****方法来设置窗口的大小,并调用setVisible()****来显示窗口。** ### 3)面板 (Panel) ### **A.****面板不是一个单独的窗口,它只是包含在窗口中的一个区域。** **B.****面板是可以将许多组件组合起来的一种容器。** **C.****最简单的创建面板的方式就是通过面板的构造函数 Panel()** **来进行。** **D.****必须将面板添加到窗体中。** ## 3.在框架中显示信息 ## **1)****所有的图形被画到相关联的窗口中。** **2)****完全可以直接在框架(Frame****)中绘入文本信息,甚至可以直接在框架中绘图。** **3)****框架经常被设计为一个组件容器。一般首先在一个面板中进行绘制,然后再将这个面板添加到框架。** ## 4.paintComponent 方法 ## **1)****JPanel** **非常适合于绘制自定义图形** **2)****其图形对象是作为 paintComponent()** **方法的参数获得的。** **3)****要创建自定义图形,需要编写扩展 JPanel** **类的新类。并覆盖父类的paintComponent()** **方法:** ## 5.Graphics对象 ## **1)****paintComponent****方法包含一个Graphics****类型的参数。** **2)****Graphics****对象记录针对绘制图形和文本的一系列设置,比如设置的图标或当前颜色、字体等。** **3)****Java****中,所有绘制都必须通过一个图形对象。** ## 6.Graphics对象的局限性 ## **1)****可以用Graphics****对象绘制的图形是原始图形。** **2)****对于这些图形,不能使用实数坐标** **3)****不能绘制虚线或宽度不定的线条** **4)****不能使用纹理或渐变颜色填充形体** ## 7.Graphics2D对象 ## **为了解决图形对象的局限性,在Java1.1****以后的版本中引入了Java 2D****。** **1)****Java2D** **包括一个 Graphics2D** **类,此类扩展了 Graphics** **类,所有图形方法都可以配合 Graphics2D****对象使用** **2)****Java 2D** **图形的重要功能:** **A.****颜色和图案:图形可以用渐变颜色和填充图案着色。** **B.****透明绘制:图形的不透明度通过** **α** **透明值控制。** **C.****本地字体:平台上的所有本地字体都可用于绘制文本。** **D.****画笔的显式控制:可以使用线条的粗细、虚线图案以及段连接样式。** **E.****坐标系的转换:可以使用平移、缩放、旋转和剪切** ## 8.基本的绘图方法 ## **每个 AWT** **组件定义一种传递 Graphics** **对象的 paint** **方法,绘制便是在该对象上执行。** **public void paint(Graphics g) \{** **g.setColor(someColor); //** **设置颜色** **g.setFont(someLimitedFont); //****设置字体** **g.drawString(...);//****绘制字符串** **g.drawLine(...); //****画线** **g.drawRect(...); //** **绘制图形轮廓** **g.fillRect(...); //** **绘制填充图形** **g.drawPolygon(...); //****绘制图形轮廓** **g.fillPolygon(...); //****绘制图形轮廓** **...** **\}** ## 9.Java 2D 中的基本绘图方法 ## **public void paintComponent(Graphics g) \{** **super.paintComponent(g);** **Graphics2D g2d = (Graphics2D)g;//****强制转换为Graphics2D** **g2d.setPaint(fillColorOrPattern);** **g2d.setStroke(penThicknessOrPattern);** **g2d.setComposite(someAlphaComposite);** **g2d.setFont(anyFont);** **g2d.setColor(anyColor);** **g2d.translate(...);** **g2d.rotate(...);** **g2d.scale(...);** **g2d.shear(...);** **g2d.setTransform(someAffineTransform);** **SomeShape s = new SomeShape(...);** **g2d.draw(s); //** **绘制图形轮廓** **g2d.fill(s); //** **绘制填充图形** **\}** ## 10.Font 类 ## **1)****Font** **类只有一个构造函数:** **public Font(String name, int style, int pointsize)** – **参数name****表示字体的名称。** – **参数style****表示样式可以是Font.PLAIN****、 Font.BOLD** **或 Font.ITALIC** – **参数pointsize****表示字体的点数,即以磅为单位的字体大小,可以是 11****、12****、14****、16** **等。** ## 11.列出当前平台上所有可用字体 ## **import** java.awt.\*; **public** **class** ListFonts \{ **public** **static** **void** main(String\[\] args) \{ GraphicsEnvironment env = GraphicsEnvironment .*getLocalGraphicsEnvironment*(); String\[\] fontNames = env.getAvailableFontFamilyNames(); System.*out*.println("可用字体:"); **for** (**int** i = 0; i < fontNames.length; i++) System.*out*.println(" " + fontNames\[i\]); \} \} ## 12.颜色 ## **1)****java.awt.Color** **类提供了13****个可用作标准颜色的常量:** **black****(黑色) green****(绿色)** **red****(红色) blue****(蓝色)** **lightGray****(浅灰色) white****(白色)** **cyan****(蓝绿色) magenta****(洋红色)** **yellow****(黄色) darkGray****(深灰色)** **orange****(橙色) gray****(灰色)** **pink****(粉红色)** 2)**Color****类的构造函数** **Color(int red,int green,int blue):****使用三个分别代表红、绿、蓝的整数来表示它们混合的颜色。这些值必须在0****到255****之间。** **Color(float red,float green,float blue)****:用三个浮点数指定红、绿、蓝的相对混合。** **3)****设置颜色方法** **如果要修改或设置组件的颜色,可以使用下列几种方法:** **void setColor(Color newColor)****:设置当前绘制的颜色** **void setForeground(Color)****:设置前景色** **void setBackground(Color)****:设置背景色** **import** java.awt.\*; **import** javax.swing.\*; **class** ColorsPanel **extends** JPanel \{ **public** **void** paintComponent(Graphics g) \{ Font f = **new** Font("Georgia", Font.*ITALIC*, 16); g.setFont(f); g.setColor(Color.*red*); g.drawString("Hello", 75, 100); g.setColor(**new** Color(0, 128, 128)); g.drawString("World", 75, 125); \} \} ## 13.绘制图形 ## **1)****在 Java 2D** **中,通常先创建 Shape** **对象,然后调用 Graphics2D** **对象的 draw** **或 fill** **方法。** **2)****Java 2D** **库以面向对象的方式组合几何形体。** **3)****java.awt.geom****包中囊括了一些有用的Shape****实现。如:** **A.****Line2D** **(线)** **B.****Rectangle2D****(矩形)** **C.****Ellipse2D** **(椭圆)** **4)****java.awt.Graphics****中提供了一些方法用来绘制图形对象中的直线和多边形。方法如下:** **void drawLine(int startX,int startY,int entX,int endY)****:绘制一条直线** **void drawPolygon(int x\[\],int y\[\],int numpoints)****:绘制多边形轮廓** **void fillPolygon(int x\[\],int y\[\],int numpoints):****绘制填充多边形** **void drawPolyline (int x\[\],int y\[\],int numpoints):****绘制顺序连线,如果第一个点和最后一个点不同,该图形不封闭** **5)****绘制矩形和椭圆** **void drawRect(int top, int left, int width, int height)****:绘制矩形边框** **void fillRect(int top, int left,int width, int height)** **:绘制填充矩形** **void drawOval(int top, int left, int width, int height)****:绘制椭圆边框** **void fillOval(int top, int left,int width, int height)** **:绘制填充椭圆** **6)****Toolkit** **对象** **要获得 Toolkit** **对象,可以使用 Toolkit** **类的静态 getDefaultToolkit** **方法。** **Toolkit getDefaultToolkit()** **:返回缺省工具包。** **Image getImage(String filename)** **:返回一个将从文件中读取其像素数据的图像。参数filename****包含图像文件(例如,GIF** **或 JPEG** **文件)** **boolean drawImage(Image img, int x, int y, ImageObserver ob)** **:** **绘制比例图像。** **7)****显示图像文件的实例** **A.****以下提供了从当前目录获取本地图像文件的代码(如果图像文件不在当前目录中,必须提供完整的路径名):** **String name="xyz.gif";** **Image img=Toolkit.getDefaultToolkit().getImage(name);** **B.****要从网络中获得图像文件,必须提供 URL****,例如:** **URL u=new URL(****http://www.xyz.com/image.gif);** **Image img= Toolkit.getDefaultToolkit().getImage(u)** **;** 转载于:https://www.cnblogs.com/woniuzhongdetou/p/3633705.html [http_blog.sina.com.cn_s_blog_4c7656e6010007tn.html]: http://blog.sina.com.cn/s/blog_4c7656e6010007tn.html [Link 1]: http://blog.sina.com.cn/wuzhemeng [JAVA--AWP]: /images/20211227/2c6f730c58ae4b3cb3bf92c0c6df61c8.png [JAVA--AWP 1]: http://photo.blog.sina.com.cn/showpic.html#blogid=4c7656e6010007tn&url=/images/20211227/2c6f730c58ae4b3cb3bf92c0c6df61c8.png
还没有评论,来说两句吧...