size=12px]我想用Canvas类实现一个能绘图的程序,可是在网上找的都是在手机下实现的[/size]
这段代码是在小应用程序中实现的:
import java.awt.*;
import java.io.*;
import javax.swing.*;
import javax.imageio.*;
import java.awt.image.*;
import java.awt.event.*;
import java.awt.color.*;
import java.util.*;
import javax.imageio.stream.*;public class SaveCanvas extends Frame {
ImageCanvas ic = new ImageCanvas(); public SaveCanvas() {
Button b = new Button("save   canvas");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
Iterator writers = ImageIO.getImageWritersByFormatName("jpeg");
ImageWriter writer = (ImageWriter) writers.next();
ImageOutputStream ios = null;
BufferedImage bufferedImage = new BufferedImage(ic.getWidth(),
ic.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics g = bufferedImage.getGraphics();
ic.paint(g);
g.dispose();
try {
ios = ImageIO.createImageOutputStream(new FileOutputStream(
"myPicture.jpg"));
} catch (IOException ioe) {
}
writer.setOutput(ios);
try {
writer.write(bufferedImage);
} catch (IOException ioe) {
} }
});
setLayout(new BorderLayout());
add(b, BorderLayout.NORTH); add(ic, BorderLayout.CENTER);
setSize(new Dimension(400, 400));
setVisible(true);
} public static void main(String args[]) {
new SaveCanvas();
} class ImageCanvas extends Canvas {
public void paint(Graphics g) {
g.setColor(Color.blue);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(Color.red);
g.drawLine(0, 0, this.getWidth(), this.getHeight());
}
}
}可是不明白这段代码中为什么要构造一个按钮,还有在按钮中添加了事件监听,在事件监听底下才能实现绘图呢?

如果我这么写[size=10px]
public class TestCanvas {
       class TC extends Canvas{
           public void paint(Graphics g){  
               //这里实现画图的内容
           }
       }
       public static void main(String args[]){
           Tc c=new TC();//这样可以直接调用吗?
       }
}
size]实在是不会用这个玩意啊......
帮帮我啊!

解决方案 »

  1.   

    代码里的button似乎是保存的时候用的吧,
      

  2.   

    Canvas是一个容器,是靠事件驱动的,哪怕是鼠标点击都算一个事件触发了容器的某一个方法
      

  3.   

    我想上面的程序中的按钮是用来保存绘制的图案的。
    想要实现绘图当然应当有事件监听,比如你绘图时要拖动鼠标,那Canvas就要监听拖鼠标的事件