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]实在是不会用这个玩意啊......
帮帮我啊!
这段代码是在小应用程序中实现的:
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]实在是不会用这个玩意啊......
帮帮我啊!
想要实现绘图当然应当有事件监听,比如你绘图时要拖动鼠标,那Canvas就要监听拖鼠标的事件