一、画板实现需要注意的地方
1、如果要设置线条的颜色,只要在调用Graphics绘制方法前,调用它的setColor方法即可。
2、显示颜色选择器的代码:
//这是JColorChooser中的一个public static方法,可直接调用
  this.color = javax.swing.JColorChooser.showDialog(null,"请选择颜色",java.awt.Color.black);
3、取得界面上的画布对象,一定要在界面setVisible后取得,否则取得的为null。
二、画板代码(其中涉及到了
监听器的使用):
*******************************主函数所在类****************************
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
 * 画板界面类,该类要继承自JFrame
 * 
 */
public 
class DrawBorder extends JFrame {
	/**
	 * 程序的入口主函数
	 */
	public static void main(String[] args) {
		DrawBorder db = new DrawBorder();
		db.initGUI();
	}
	/**
	 * 初始化界面的方法
	 */
	private void initGUI() {
		// 设置窗体对象的属性
		this.setSize(new Dimension(600, 500));
		this.setTitle("简单画板");
		this.set
DefaultClose
Operation(3);
		this.setLocationRelativeTo(null);
		// this.setLayout(new BorderLayout());
		JPanel northPanel = new JPanel();
		JButton btnLine = new JButton("Line");
		JButton btnRect = new JButton("Rect");
		JButton btnOval = new JButton("Oval");
		JButton btnRoundRect = new JButton("RoundRect");
		JButton btnTriang = new JButton("Triang");
		// btnTriang.setActionCommand("");
		
		northPanel.add(btnLine);
		northPanel.add(btnRect);
		northPanel.add(btnOval);
		northPanel.add(btnRoundRect);
		northPanel.add(btnTriang);
		
		/**
		 * 使用匿名内部类来实现动作
事件处理类
		 */
		ActionListener al = new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				
shapeType = e.getActionCommand();
				System.out.println("当前点击的按钮时:"+shapeType);
			}
		};
		//给事件源添加动作监听器,绑定事件处理类的对象
		btnLine.addActionListener(al);
		btnRect.addActionListener(al);
		btnOval.addActionListener(al);
		btnRoundRect.addActionListener(al);
		btnTriang.addActionListener(al);
		
		this.add(northPanel,BorderLayout.NORTH);
		
		
		JPanel drawPanel = new JPanel();
		drawPanel.setBackground(Color.WHITE);
		this.add(drawPanel,BorderLayout.CENTER);
		
		
		this.setVisible(true);
		
		//一定要在窗体可见之后才能获取画布,否则获取的画布为null
		Graphics g = drawPanel.getGraphics();
		
		//绘制图形的事件处理类
		DrawListener dl = new DrawListener(g,this);
		//给事件源drawPanel添加鼠标监听器方法,绑定事件出类的对象dl
		drawPanel.addMouseListener(dl);
	}
	//存储图形的属性
	private String shapeType = "Line";
	
	/**
	 * 获取图形的属性值
	 * @return 返回shapeType的值
	 */
	public String getShapeType(){
		return shapeType;
	}
	
}
  
**************************继承鼠标监听器类******************************
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class DrawListener implements MouseListener {
	// 声明绘制图形的对象
	private Graphics g;
	// 鼠标按下的坐标值
	private int x1, y1, x2, y2;
	// 图形
	private DrawBorder db;
	
	/**
	 * 构造方法
	 * @param g绘制图形的对象
	 */
	public DrawListener(Graphics g,DrawBorder db){
		this.g = g;
		this.db =db ;
	}
	
	/**
	 * 在事件源上发生鼠标单击操作的时候执行该方法
	 */
	public void mouseClicked(MouseEvent e) {
	}
	/**
	 * 在事件源上发生鼠标按下操作的时候执行该方法
	 */
	public void mousePressed(MouseEvent e) {
		// 获取鼠标按下时的坐标值
		x1 = e.getX();
		y1 = e.getY();
	}
	/**
	 * 在事件源上发生鼠标释放操作的时候执行该方法
	 */
	public void mouseReleased(MouseEvent e) {
		// 获取鼠标释放时的坐标值
		x2 = e.getX();
		y2 = e.getY();
		
		//System.out.println(g+"  "+x1+"   "+y1+"   "+x2+"    "+y2);
		if(db.getShapeType().equals("Line")){
			//绘制一条直线
			g.drawLine(x1, y1, x2, y2);
		}else if(db.getShapeType().equals("Rect")){
			g.drawRect(x1, y1, Math.abs(x1-x2), Math.abs(y1-y2));
		}
	}
	/**
	 * 鼠标移动到事件源上时执行该方法 只执行一次
	 */
	public void mouseEntered(MouseEvent e) {
	}
	/**
	 * 鼠标离开到事件源上时执行该方法 只执行一次
	 */
	public void mouseExited(MouseEvent e) {
	}
}