绘图

1,认识Graphics类和Canvas以及基本的绘图(画线,画字符串,画矩形,画圆,多边形)

package Graphics;

import java.awt.Frame;
import java.awt.Graphics;


/*0,Graphics是一个抽象类,没有办法直接产生对象,也没提供任何的static方法直接调用
 * 1,产生Graphics对象的两种方式:一种有系统给的(每个继承自Component的类都可以通过这个方法取得
 * 作用于它之上的Graphics对象,即每个Component对象都有一个自己专属的Graphics对象),如本例。另
 * 一种是从Image类取得
 * 2,画法其实第一条已经告诉了,就是要继承一个组件,然后在这个组件上作画,去改写Graphics类的paint方法,
 * 显然我们一般不会再操作型的组件如?Button,Chekbox等上作画,比较常用的是在Frame和Panel和Canvas上,
 * Canvas成为画布
 * 3,本例是直接在Frame上作画,继承Frame,下一例是在画布上作画,故继承Canvas,画好后将画布添加到Frame上
 * */
public class DrawLineTest1 extends Frame {

	
	public static void main(String[] args) {
		
		new DrawLineTest1();

	}
	
	public DrawLineTest1()
	{
		super("DrawLineTest1");//设置Frame的标题为DrawLineTest1
		setSize(50,50);
		setVisible(true);
	}
	
	public void paint(Graphics g)//每个继承自Component的类都可以通过这个方法取得作用于它之上的Graphics对象
	{
		g.drawLine(10, 15, 30, 40);
	}	

}

在画布上作图

package Graphics;

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Frame;
import java.awt.Graphics;

//在画布上作画,那么就要继承画布类Canvas,原理在test1已经说过
public class DrawLineTest2 extends Canvas {

	
	public static void main(String[] args) {
		
		DrawLineTest2 d = new DrawLineTest2();
		Frame f = new Frame("DrawStringTest");
		f.add(d,BorderLayout.CENTER);
		f.pack();
		f.setVisible(true);
	}
	
	public DrawLineTest2()
	{
		setSize(50,50);
	}
	
	public void paint(Graphics g)
	{
		g.drawLine(10, 15, 30, 40);
	}

}

2,高级绘图方法,颜色字体设置

package Graphics;

import java.awt.*;
import java.awt.event.*;

/*在绘图这一章中,1,讲述了认识Graphics类(Graphics对象产生方法,paint方法,画布Canvas类)
 * 2,基本绘图方法:画线,画字符串,画矩形,画圆,画多边形
 * 3,高级绘图方法:颜色设置(Graphics的setColor方法),字体设置(本测试程序)*/
public class ShowFonts implements ItemListener
{
	Frame f;
	MyCanvas mc;
	Choice ch;
	String fontName[];//fontName字符串数组
	
	
	public static void main(String argv[])
	{
		new ShowFonts();
	}
	
	
	public ShowFonts()
	{
		f = new Frame("ShowFonts");
		
		fontName = GraphicsEnvironment.getLocalGraphicsEnvironment().
					getAvailableFontFamilyNames();//注意这个方法,返回一个字符串数组
		
		ch = new Choice();
		ch.addItemListener(this);
		for (int i=0; i<fontName.length; i++)
			ch.addItem(fontName[i]);
		
		mc = new MyCanvas(fontName[0]);//得到一个MyCanvas对象
		
		f.add(ch, BorderLayout.NORTH);
		f.add(mc, BorderLayout.CENTER);
		f.pack();
		f.setVisible(true);
	}
	
	
	public void itemStateChanged(ItemEvent e)
	{
		mc.setFontName(ch.getSelectedItem());//调用MyCanvas中的方法设置fontName
		mc.repaint();//更新画面上的字符串(更改颜色)
	}
	
	//内部类 MyCanvas
	class MyCanvas extends Canvas
	{
		String fontName;
		
		public MyCanvas(String name)
		{
			fontName = name;
			setSize(200,50);
		}
		
		public void setFontName(String name)
		{
			fontName = name;
		}
		
		public void paint(Graphics g)
		{
			g.setFont(new Font(fontName, Font.PLAIN, 36));
			g.setColor(Color.blue);
			g.drawString("中文ABC", 60, 35);
			g.clearRect(10,10,50,50);//语句块处理:clearRect和copyArea
		}
	}
	
}

posted @ 2011-03-29 21:16  jinmengzhe  阅读(554)  评论(0编辑  收藏  举报