Java - Graphics

Java_Graphics 功效:Graphics类是用于绘图和显示格式化文字的工具
API:http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html

1.在Applet中写字和画画
要创建一个Applet,必须让自己的类从java.allpet.Applet类继承即可。Applet类是一个抽象类,它提供了五个抽象方法
init( ) applet初始化,在applet首次创建时执行。
start() applet开始正常运作。在每次applet画面在浏览器窗口中可见时调用,也在init()后调用。
stop( ) 停止运作。每当applet画面移出浏览器窗口的可见区域时调用,也是destroy( )前被调用。
paint() 在applet窗口中或画布上写字画图。也在update()方法中被自动调用。
destroy()废弃当前applet的实例。在applet从网页上重新装载时调用

例一:

import java.awt.*;
import java.applet.*;
public class Java_Graphics extends Applet {
   public void paint(Graphics g) {
        g.drawString("用Graphics写字和画图的基本方法", 20,40);  //写字
        g.drawOval(100, 100, 30, 30);                       //画椭圆
        g.drawOval(200, 100, 40, 25);
        g.drawLine(20, 140, 200,140);                       //画直线
        g.drawRect(20, 160, 50, 80);                        //画ru
        g.drawRoundRect(110, 160, 100, 100, 25, 18);
    }
}

2.设置颜色以及字体
例1中的文字使用默认的字体和大小和默认的黑色,不免单调。使用不同的字体字号和选择不同的颜色是美化网页必不可少的;
设置背景色的是方法继承自Applet的,语法为:setBackground(new Color(int,int,int))即它的参数是一个Color对象句柄。
设置前景色的方法是属于Graphics的,即设置Graphics的绘图色。语法为:g.setColor(Color对象);
选择颜色有两种方法,一是直接用颜色值RGB创建Color对象,如:Color color = new Color(R,G,B)
另一种是用颜色常量如Color.red, Color.green等。Color类提供了13种颜色常量,由其格式可知它们都是静态的终极的。

设置字体需要使用java.awt.Font类创建一个Font对象。Font的常用构建器形如:
Font(字体名或逻辑字体名,字型,字号)
a:字体名是运行程序的操作系统适用的字体,
b:字型为Font类声明了的静态常量,有下列4种:
Font.PLAIN, Font.BOLD, Font.ITALIC, Font.BOLD|ITALIC
c:分别表示正常、粗体、斜体和粗斜体。下面的例程演示设置颜色和字体的方法。

例二:

import java.awt.*;
import java.applet.*;
public class FontDemo extends Applet {
   public void paint (Graphics g){
       String s1 = "This Font is ";
       Font font = new Font("Arial", Font.BOLD, 18);
       g.setColor(Color.red);
        setBackground(new Color(0,255,0));
       g.setFont(font);
       g.drawString(s1 + font.getName() ,20, 60);
       g.setFont(new Font("隶书", Font.BOLD, 28));
       g.drawString("现在是隶书" ,20, 120);
       g.setColor(new Color(0,0,0));
   }
}
创建了字体对象font后,只要简单地用g.setFont(font)设置使用新字体。直到再次使用setFont前都有效。
在实际应用时最好先保存原有的颜色和字体设置,在使用完了后再恢复。

3.drawString()如何实现精确定位?
(1)需求:我们需要知道字符串显示的长度(象素)以控制水平方向的尺寸,知道字体的高度以控制垂直方向的尺寸
(2)解决方案:
Java另外提供了FontMetrics类来解决排版问题
用Graphics的getFontMetrics方法创建一个FontMetrics对象,它的getHeight()方法可得到字高,stringWidth(String)方法得到字符串占用的宽度。
FontMetrics fm = g.getFontMetrics(font); // 创建一个FontMetrics对象
int height = fm.getHeight();
int width = fm.stringWidth(s1);

例三:

import java.awt.*;
import java.applet.*;
public class FontMetricsDemo extends Applet {
   public void paint (Graphics g){
       String s1 = "Hello, Java World!";
       g.setColor(Color.red);              //前景色
       setBackground(new Color(0,255,0));  //背景色
       Font font = new Font("Arial", Font.BOLD, 18); //字体
       g.setFont(font);                    //设置字体

       FontMetrics fm = g.getFontMetrics(font); //类对象,可以获得某个字体的高度,以及字符串的宽度
       int height = fm.getHeight();
       int width = fm.stringWidth(s1);

       int posx =50; int posy = 50;            
       g.drawString(s1 ,posx, posy);           //posx,posy位置显示s1
       g.drawString("I will come in." ,posx +width, posy+height);//偏移后的字符串显示
   }
}

4.获得系统所支持的所有的字体名
Java有一个类叫GraphicsEnvironment提供绘图环境,它有一个方法叫getAvailableFontFamilyNames();
由它可以得到程序所在机器操作系统的所有字体名(是String不是Font)。
由于字体种类很多,一屏幕放不下,只在设定的Applat的界限内显示,除非给窗口添加垂直滚动条;

例四:

import java.awt.*;
import java.applet.*;
public class FontAll extends Applet{
    public void paint(Graphics g) {
       ***GraphicsEnvironment gv =GraphicsEnvironment.getLocalGraphicsEnvironment();***
       ***String[] ftNames = gv.getAvailableFontFamilyNames();***
       for (int i=0; i<ftNames.length; i++) {
           Font ft = new Font(ftNames[i], Font.BOLD, 14);
       g.setPaintMode();
       g.setFont(ft);
       g.drawString(ftNames[i], 5, 15 * (i+1));
       g.drawString("Hello the world!", 200, 15 * (i+1));
       }
    }
}

5.基本图形的绘制
介绍Graphics拥有的绘图方法,除了矩形和卵形以外,还有多角形、填充图形和三维矩形等,所有方法都是void类型的。

drawLine(int,int,int,int)      画直线。起点坐标,终点坐标
drawRect(int,int,int,int)      画矩形。左角坐标,宽,高
drawRoundRect(int,int,int,int,int,int)  画圆角矩形。左角坐标,X宽,Y高,深度X,深度Y
draw3DRect(int,int,int,int,boolean)     画3D矩形。左角坐标,宽X,高Y,ture
drawOval(int,int,int,int)           画卵形。中心坐标,长轴,短轴 
drawArc(int,int,int,int,int,int)    画弧。左角坐标,宽,高,起始角,终止角
drawPolyline(int[],int[],int)       画折线。各点的X坐标,Y坐标,折线数 
drawPolygon(int[],int[],int)        画多角形。各点的X坐标,Y坐标,边数
drawPolygon(Polygon)                画多角形。定义好的多角形对象

例五:

import java.awt.*;
import java.applet.*;
public class GraphArcPolygon extends Applet {
    private int cx;
    private int cy;
    public void paint(Graphics g) {
         //定义待画组合图形的中心
         Point p = new Point(cx / 2, cy / 2);
         //定义待画矩形的轮廓
         Rectangle rect = new Rectangle((p.x - 40), (p.y - 40), 80, 40); //定义多边形的顶点
         int[] xP = {(p.x - 40), (p.x + 90), p.x+200, (p.x - 40)};
         int[] yP = {(p.y - 40), (p.y +140), (p.y + 60), (p.y-40)};
         g.drawArc(rect.x, rect.y, rect.width, rect.height * 2, 270, 90);
         g.drawPolygon(xP, yP,3);
         g.setColor(Color.red);
    }

    public void init() {
     Toolkit tk = Toolkit.getDefaultToolkit();
     Dimension d = tk.getScreenSize();
     cx = d.width/2 ; cy = d.height/2;
    }
}

6.画填充图形3D矩形等

import java.awt.*;
import java.applet.*;
public class Graph3DRect extends Applet {
   public void paint(Graphics g) {
        g.setColor(Color.green);
        g.fillArc(10, 10, 60, 40, 30, 60);
        g.fillOval(10, 60, 60, 40);
        g.fillRect(80, 10, 60, 40);
        Polygon p = new Polygon();
        p.addPoint(150, 10);
        p.addPoint(210, 10);
        p.addPoint(210, 50);
        p.addPoint(150, 50);
        g.fillPolygon(p);   //绘制高度为5个像素,视角为45度正方向的3维矩形
        g.fill3DRect(150, 10, 60, 40, true);
        for (int i=1; i<=5; i++)
            g.draw3DRect(150 + i, 10 - i, 60, 40, true);
        //绘制高度为5个像素,视角为135度正方向的3维矩形
        g.fill3DRect(150, 60, 60, 40, true);
        for (int i=1; i<=5; i++)
            g.draw3DRect(150 - i, 60 + i, 60, 40, true);
   }
}
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值