绘图
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
}
}
}

浙公网安备 33010602011771号