免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 870 | 回复: 0
打印 上一主题 下一主题

java做的画图版 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-01 03:15 |只看该作者 |倒序浏览
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.awt.geom.*;
class Point
{
int x,y;
Color col;
int tool;
int boarder;
Point(int x, int y, Color col, int tool, int boarder)
{
  this.x = x;
  this.y = y;
  this.col = col;
  this.tool = tool;
  this.boarder = boarder;
  }
}
class paintboard extends Frame implements ActionListener,MouseMotionListener,MouseListener,ItemListener
{
int x = -1, y = -1;
int con = 1;//画笔大小
int Econ = 5;//橡皮大小
int toolFlag = 0;//toolFlag:工具标记
                 //toolFlag工具对应表:
                 //(0--画笔);(1--橡皮);(2--清除);
                 //(3--直线);(4--圆);(5--矩形);
Color c = new Color(0,0,0); //画笔颜色
BasicStroke size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);//画笔粗细
Point cutflag = new Point(-1, -1, c, 6, con);//截断标志
Vector paintInfo = null;//点信息向量组
int n = 1;

// *工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除*/
Panel toolPanel;
Button eraser, drLine,drCircle,drRect;
Button clear ,pen;
Choice ColChoice,SizeChoice,EraserChoice;
Button colchooser;
Label 颜色,大小B,大小E;
  paintboard(String s)
  {
  super(s);
  addMouseMotionListener(this);
  addMouseListener(this);
  paintInfo = new Vector();
/*各工具按钮及选择项*/
  //颜色选择
  ColChoice = new Choice();
  ColChoice.add("黑色");
  ColChoice.add("红色");
  ColChoice.add("蓝色");
  ColChoice.add("绿色");
  ColChoice.addItemListener(this);
  //画笔大小选择
  SizeChoice = new Choice();
  SizeChoice.add("1");
  SizeChoice.add("3");
  SizeChoice.add("5");
  SizeChoice.add("7");
  SizeChoice.add("9");
  SizeChoice.addItemListener(this);
  //橡皮大小选择
  EraserChoice = new Choice();
  EraserChoice.add("2");
  EraserChoice.add("3");
  EraserChoice.add("4");
  EraserChoice.add("5");
  EraserChoice.addItemListener(this);
  toolPanel = new Panel();
  clear = new Button("清除");
  eraser = new Button("橡皮");
  pen = new Button("画笔");
  drLine = new Button("画直线");
  drCircle = new Button("画圆形");
  drRect = new Button("画矩形");
   colchooser = new Button("显示调色板");
  //各组件事件监听
  clear.addActionListener(this);
  eraser.addActionListener(this);
  pen.addActionListener(this);
  drLine.addActionListener(this);
  drCircle.addActionListener(this);
  drRect.addActionListener(this);
  colchooser.addActionListener(this);
  颜色 = new Label("画笔颜色",Label.CENTER);
  大小B = new Label("画笔大小",Label.CENTER);
  大小E = new Label("橡皮大小",Label.CENTER);
  //面板添加组件
  toolPanel.add(pen);
  toolPanel.add(drLine);
  toolPanel.add(drCircle);
  toolPanel.add(drRect);
  toolPanel.add(颜色); toolPanel.add(ColChoice);
  toolPanel.add(大小B); toolPanel.add(SizeChoice);
  toolPanel.add(colchooser);
  toolPanel.add(eraser);
  toolPanel.add(大小E); toolPanel.add(EraserChoice);
  toolPanel.add(clear);
  //工具面板到APPLET面板
  add(toolPanel,BorderLayout.NORTH);
  setBounds(60,60,800,650); setVisible(true);
  validate();
  //dialog for save and load
  addWindowListener(new WindowAdapter()
   {
   public void windowClosing(WindowEvent e)
    { System.exit(0);}
  });
}
public void paint(Graphics g)
{
  Graphics2D g2d = (Graphics2D)g;
  Point p1,p2;
  n = paintInfo.size();
  if(toolFlag==2)
    g.clearRect(0,0,getSize().width,getSize().height);//清除
  for(int i=0; i
   g2d.setColor(p1.col);
   g2d.setStroke(size);
  if(p1.tool==p2.tool)
   {
   switch(p1.tool)
    {
    case 0://画笔
      Line2D line1 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);
      g2d.draw(line1);
     break;
    case 1://橡皮
      g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder);
     break;
    case 3://画直线
      Line2D line2 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);
      g2d.draw(line2);
     break;
    case 4://画圆
       Ellipse2D ellipse = new Ellipse2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y));
       g2d.draw(ellipse);
     break;
    case 5://画矩形
       Rectangle2D rect = new Rectangle2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y));
       g2d.draw(rect);
     break;
    case 6://截断,跳过
      i=i+1;
     break;
    default :
    }//end switch
   }//end if
  }//end for
}
public void itemStateChanged(ItemEvent e)
{
  if(e.getSource()==ColChoice)//预选颜色
  {
   String name = ColChoice.getSelectedItem();
   if(name=="黑色")
    { c = new Color(0,0,0); }
   else if(name=="红色")
    { c = new Color(255,0,0); }
   else if(name=="绿色")
    { c = new Color(0,255,0); }
   else if(name=="蓝色")
    { c = new Color(0,0,255); }
  }
  else if(e.getSource()==SizeChoice)//画笔大小
   {
   String selected = SizeChoice.getSelectedItem();
   if(selected=="1")
    {
    con = 1;
    size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
    }
   else if(selected=="3")
    {
    con = 3;
    size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
    }
   else if(selected=="5")
    { con = 5;
    size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
    }
   else if(selected=="7")
    { con = 7;
    size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
    }
   else if(selected=="9")
    { con = 9;
    size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
    }
  }
  else if(e.getSource()==EraserChoice)//橡皮大小
  {
   String Esize = EraserChoice.getSelectedItem();
   if(Esize=="2")
   {  Econ = 3*3; }
   else if(Esize=="3")
   {  Econ = 4*4; }
   else if(Esize=="4")
   {  Econ = 5*5; }
   else if(Esize=="5")
   {  Econ = 6*6; }
}
}
public void mouseDragged(MouseEvent e)
{
  Point p1 ;
  switch(toolFlag){
   case 0://画笔
     x = (int)e.getX();
     y = (int)e.getY();
     p1 = new Point(x, y, c, toolFlag, con);
     paintInfo.addElement(p1);
     repaint();
     break;
   case 1://橡皮
     x = (int)e.getX();
     y = (int)e.getY();
     p1 = new Point(x, y, null, toolFlag, Econ);
     paintInfo.addElement(p1);
     repaint();
     break;
   default :
  }
  paint(g);
}
public void mousePressed(MouseEvent e)
{
  Point p2;
   switch(toolFlag){
   case 3://直线
     x = (int)e.getX();
     y = (int)e.getY();
     p2 = new Point(x, y, c, toolFlag, con);
     paintInfo.addElement(p2);
     break;
   case 4: //圆
     x = (int)e.getX();
     y = (int)e.getY();
     p2 = new Point(x, y, c, toolFlag, con);
     paintInfo.addElement(p2);
     break;
   case 5: //矩形
     x = (int)e.getX();
     y = (int)e.getY();
     p2 = new Point(x, y, c, toolFlag, con);
     paintInfo.addElement(p2);
     break;
   default :
  }
}
public void mouseReleased(MouseEvent e)
{
  Point p3;
   switch(toolFlag){
   case 0: //画笔
     paintInfo.addElement(cutflag);
     break;
   case 1: //eraser
     paintInfo.addElement(cutflag);
     break;
   case 3: //直线
     x = (int)e.getX();
     y = (int)e.getY();
     p3 = new Point(x, y, c, toolFlag, con);
     paintInfo.addElement(p3);
     paintInfo.addElement(cutflag);
     repaint();
     break;
   case 4: //圆
     x = (int)e.getX();
     y = (int)e.getY();
     p3 = new Point(x, y, c, toolFlag, con);
     paintInfo.addElement(p3);
     paintInfo.addElement(cutflag);
     repaint();
     break;
   case 5: //矩形
     x = (int)e.getX();
     y = (int)e.getY();
     p3 = new Point(x, y, c, toolFlag, con);
     paintInfo.addElement(p3);
     paintInfo.addElement(cutflag);
     repaint();
     break;
   default:
  }
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void actionPerformed(ActionEvent e)
{
  if(e.getSource()==pen)//画笔
  { toolFlag = 0; }
  if(e.getSource()==eraser)//橡皮
  { toolFlag = 1; }
  if(e.getSource()==clear)//清除
  {
   toolFlag = 2;
   paintInfo.removeAllElements();
   repaint();
  }
  if(e.getSource()==drLine)//画线
  { toolFlag = 3; }
  if(e.getSource()==drCircle)//画圆
  { toolFlag = 4; }
  if(e.getSource()==drRect)//画矩形
  { toolFlag = 5; }
  if(e.getSource()==colchooser)//调色板
  {
   Color newColor = JColorChooser.showDialog(this,"调色板",c);
   c = newColor;}
  }
}//end
public class houyang
{
public static void main (String args[])
{
  new paintboard("画图程序");
  }
}





本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/29266/showart_224677.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP