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