Pointcur=track.get(i);
Pointnext=track.get(i+1);
g.drawLine(cur.x,cur.y,next.x,next.y);
}
}
privatevoidAddPoint(Pointp){
track.add(p);
}
@Override
publicvoiddoMousePress(Pointp){
//TODOAuto-generatedmethodstub
AddPoint(p);
}
@Override
publicvoiddoMouseDrag(Pointp){
//TODOAuto-generatedmethodstub
AddPoint(p);
}
@Override
publicvoiddoMouseRelease(Pointp){
//TODOAuto-generatedmethodstub
AddPoint(p);
}
}
Rect.java
packagebase;
importjava.awt.Graphics;
importjava.awt.Point;
publicclassRectextendsGrapicsElem{
intx,y,width,height;
@Override
publicvoiddraw(Graphicsg){
//TODOAuto-generatedmethodstub
g.drawRect(getX(),getY(),getWidth(),getHeight());
}
@Override
publicvoiddoMousePress(Pointp){
super.setStart(p);
super.setEnd(p);
}
@Override
publicvoiddoMouseDrag(Pointp){
super.setEnd(p);
}
@Override
publicvoiddoMouseRelease(Pointp){
super.setEnd(p);
}
publicintgetX(){
returnMath.min(start.x,end.x);
}
publicintgetY(){
returnMath.min(start.y,end.y);
}
publicintgetWidth(){
returnMath.abs(start.x-end.x);
}
publicintgetHeight(){
returnMath.abs(start.y-end.y);
}
}
Circle.java
packagebase;
importjava.awt.Graphics;
publicclassCircleextendsRect{
@Override
publicvoiddraw(Graphicsg){
//TODOAuto-generatedmethodstub
g.drawOval(getX(),getY(),getWidth(),getHeight());
}
}
windowsPaint.java
packagewinpaint;
importjava.awt.BasicStroke;
importjava.awt.Button;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.Graphics2D;
importjava.awt.Image;
importjava.awt.Point;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
importjava.awt.event.MouseMotionListener;
importjava.io.File;
importjava.io.IOException;
importjava.nio.Buffer;
importjava.util.ArrayList;
importjava.util.BitSet;
importjava.util.List;
importjava.awt.geom.*;
importjava.awt.image.BufferedImage;
importjavax.imageio.ImageIO;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JToolBar;
importbase.Circle;
importbase.GrapicsElem;
importbase.Line;
importbase.Rect;
importjava.awt.BorderLayout;
publicclasswindowsPaintextendsJPanel
implementsMouseListener,MouseMotionListener
{
Stringcommand="矩形";
ListLg=newArrayList();
GrapicsElemcur;
JLabellabel;
publicwindowsPaint(Stringtitle){
init();
}
privatevoidinit(){
addMouseListener(this);
addMouseMotionListener(this);
}
/**
*可以使用反射去掉判断语句、
*Class
>g=Class.forName("base.Rect");
*g.newInstance();
*@return
*/
privateGrapicsElemnewInstance(){
command=WinToolBar.Command;
if(command.equals("矩形")){
returnnewRect();
}elseif(command.equals("圆形")){
returnnewCircle();
}elseif(command.equals("线")){
returnnewLine();
}
returnnull;
}
@Override
publicvoidpaint(Graphicsg){
//TODOAuto-generatedmethodstub
super.paint(g);
Graphics2Dg2d=(Graphics2D)g;
//g2d.setColor(cur.getColor());
//System.out.println(cur.getColor());
g2d.setStroke(newBasicStroke(10.0f));
for(inti=0;iGrapicsElemge=Lg.get(i);
ge.draw(g);
}
}
//@Override
//publicvoidrepaint(){
////TODOAuto-generatedmethodstub
////TODOAuto-generatedmethodstub
////
//super.repaint();
////Threadthread=newThread(newRunnable(){
////@Override
////publicvoidrun(){
//////TODOAuto-generatedmethodstub
////try{
////SaveToFile();
////}catch(IOExceptione){
//////TODOAuto-generatedcatchblock
////e.printStackTrace();
////}
////}
////});
////thread.start();
////
////ImageIconbg=newImageIcon("tmp.jpg");
////if(bg!
=null){
////if(label!
=null)
////this.remove(label);
////label=newJLabel(bg);
////label.setBounds(0,0,bg.getIconWidth(),bg.getIconHeight());
////this.add(label);
////super.repaint();
////}
////
//}
privatevoidSaveToFile()throwsIOException{
//TODOAuto-generatedmethodstub
BufferedImagebimg=newBufferedImage(this.getWidth(),this.getHeight(),BufferedImage.TYPE_3BYTE_BGR);
Graphics2Dg2d=bimg.createGraphics();
this.paint(g2d);
ImageIO.write(bimg,"jpg",newFile("tmp.jpg"));
}
@Override
publicvoidmousePressed(MouseEvente){
Pointp=newPoint(e.getX(),e.getY());
cur=newInstance();
cur.doMousePress(p);
Lg.add(cur);
}
@Override
publicvoidmouseDragged(MouseEvente){
Pointp=newPoint(e.getX(),e.getY());
cur.doMouseDrag(p);
repaint();
}
@Override
publicvoidmouseReleased(MouseEvente){
Pointp=newPoint(e.getX(),e.getY());
cur.doMouseRelease(p);
repaint();
}
@Override
publicvoidmouseMoved(MouseEvente){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidmouseClicked(MouseEvente){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidmouseEntered(MouseEvente){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidmouseExited(MouseEvente){
//TODOAuto-generatedmethodstub
}
}
WinToolBar.java
packagewinpaint;
importjava.awt.Color;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.ItemEvent;
importjava.awt.event.ItemListener;
importjavax.swing.JButton;
importjavax.swing.JComboBox;
importjavax.swing.JSeparator;
importjavax.swing.JToolBar;
publicclassWinToolBarextendsJToolBarimplementsActionListener{
publicstaticStringCommand="矩形";
JButtonbtn1,btn2,btn3;
//windowsPaintwinp;
publicWinToolBar(windowsPaintwinP){
btn1=newJButton("矩形");
btn2=newJButton("圆形");
btn3=newJButton("线");
this.add(btn1);
this.add(btn2);
this.add(btn3);
btn1.addActionListener((ActionListener)this);
btn2.addActionListener((ActionListener)this);
btn3.addActionListener((ActionListener)this);
//this.winp=winP;
JComboBoxcom=newJComboBox();
com.addItem("红色");
com.addItem("蓝色");
com.addItem("黑色");
com.addItemListener(newItemListener(){
@Override
publicvoiditemStateChanged(ItemEvente){
//TODOAuto-gen