`
mimang2007110
  • 浏览: 237360 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

【转】java,画图,可调画笔粗细

阅读更多
/*可调画笔粗细-Java画图实验-Java源代码 -good code
*画直线,曲线,矩形,椭圆,可调颜色,有橡皮擦功能
*可调画笔粗细
*没有解决闪烁功能
*hxz*/
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;
       }
}


/*
*BasicStroke
*Choice
*validate();
**/
class paintboard extends Frame implements ActionListener,MouseMotionListener,MouseListener,ItemListener
{
     int xx0=0,yy0=0;
     int xx1=0,yy1=0;
     int type=6;
     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);//清除
           
          switch(type)
          {
               case 3:
          Line2D line = new Line2D.Double(xx0,yy0,xx1,yy1);
          g2d.draw(line);
          break;
               case 4:
          Ellipse2D ellipse1 = new Ellipse2D.Double(xx0, yy0, Math.abs(xx1-xx0) ,Math.abs(yy1-yy0));
          g2d.draw(ellipse1);
          break;
               case 5:
          Rectangle2D rect1 = new Rectangle2D.Double(xx0, yy0, Math.abs(xx1-xx0) , Math.abs(yy1-yy0));
          g2d.draw(rect1);
          break;
          default :break;
          }
          
       for(int i=0; i<n-1; i++)
       {
                  p1 = (Point)paintInfo.elementAt(i);
                  p2 = (Point)paintInfo.elementAt(i+1);
                  size = new BasicStroke(p1.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
              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 :break;
                         }//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)
     {
           xx1 = (int)e.getX();
           yy1 = (int)e.getY();
            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;
               case 3:

               case 4:
               case 5:
               repaint();
               break;
               
                  default :
            }
//repaint();
     }
     public void mousePressed(MouseEvent e)
     {
          xx0= (int)e.getX();
          yy0= (int)e.getY();
            Point p2;
             switch(toolFlag){
                  case 3://直线
               type=3;
               x = (int)e.getX();
               y = (int)e.getY();
               p2 = new Point(x, y, c, toolFlag, con);
               paintInfo.addElement(p2);
               break;
               
                  case 4: //圆
               type=4;
               x = (int)e.getX();
               y = (int)e.getY();
               p2 = new Point(x, y, c, toolFlag, con);
               paintInfo.addElement(p2);
               break;
               
                  case 5: //矩形
               type=5;
               x = (int)e.getX();
               y = (int)e.getY();
               p2 = new Point(x, y, c, toolFlag, con);
               paintInfo.addElement(p2);
               break;
               
                  default :type=6;
            }
     }
     
     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 mouseMoved(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("画图程序");
       }
}
/*
*javac -Xlint:unchecked houyang.java
*
houyang.java:270: 警告:[unchecked] 对作为普通类型 java.util.Vector 的成员的 add
Element(E) 的调用未经检查
                paintInfo.addElement(p1);
                                    ^
13 警告
*/

 

分享到:
评论

相关推荐

    java画图板程序代码

    Java 画图板是使用 Java 语言编写的图形绘制程序,提供了基本的绘图功能,如画笔、直线、椭圆、矩形等,用户可以使用该程序绘制简单的图形。下面我们将对 Java 画图板程序进行详细的分析和解释。 1. Java 画图板...

    java-huaturuanjian.zip_huaturuanjianzainao_java画图多边形_画笔java

    在本示例中,"java-huaturuanjian.zip" 包含了一个Java编写的画图程序,允许用户进行画笔操作、绘制直线、圆、矩形和多边形,以及使用橡皮擦进行擦除。这个程序还具有调整画笔和橡皮擦大小的功能,并且可以显示颜色...

    pb.rar_Pb画图_java画笔_pb_pb 画图_画笔程序

    标题中的"pb.rar_Pb画图_java画笔_pb_pb 画图_画笔程序"表明这是一个基于Java编程语言实现的图形界面(GUI)应用程序,主要用于画图操作,它可能使用了Pb(可能是Paintbrush或其他类似命名的库或框架)来提供画笔、...

    cn.rar_JAVA画图程序_java画图_画图_画图 java

    标签“java画图程序”,“java画图”,“画图”,“画图_java”进一步强调了主题,这些都是与Java图形编程相关的关键词。 在压缩包的文件列表中,“www.pudn.com.txt”可能是一个链接或者说明文件,来自pudn.com...

    Java画图板应用

    为了提供类似Windows画图板的橡皮擦功能,Java画图板应用可能实现了两种模式:一种是使用特定的橡皮擦工具,另一种是将画笔颜色设置为背景色,从而达到擦除的效果。此外,添加形状绘制功能,如矩形、圆形和多边形,...

    java画图板系统

    【Java画图板系统】是一个基于Java编程语言开发的图形用户界面(GUI)应用程序,它允许用户在屏幕上绘制图形和图像。这个系统可能是为教育、设计或者简单的绘图练习而设计的,它提供了基本的绘图工具,如选择颜色、...

    java 画图程序 多窗体 多种画笔 橡皮 保存 文件 图片

    Java 画图程序是一种利用Java编程语言开发的图形用户界面(GUI)应用程序,它允许用户在屏幕上绘制图形、线条和形状。在这个程序中,我们关注的焦点是多窗体、多种画笔、橡皮擦功能以及文件保存和图片处理。 1. **...

    pb.rar_java 画图板_java画图_pb 画图_图形学_画图 java

    标题中的"pb.rar_java 画图板_java画图_pb 画图_图形学_画图 java"表明这是一个关于Java编程的项目,特别是涉及到图形绘制功能的实现。"pb.rar"可能是一个压缩文件,包含了实现画图功能的Java源代码和其他相关资源。...

    java 画图板 windows画图板简单实现

    在Java编程语言中,实现一个简单的Windows画图板是一个经典的练习,它可以帮助初学者更好地理解图形用户界面(GUI)的设计以及事件处理机制。这个项目通常会涉及到Java的Swing库,这是一个用于创建桌面应用程序的GUI...

    java画图程序(附源码).rar

    Java画图程序是一种基于Java编程语言开发的图形用户界面(GUI)应用,它允许程序员创建和展示各种图形。在这个特定的“java画图程序(附源码).rar”压缩包中,包含了实现画图功能的源代码,使得学习者或开发者能够...

    java开发的画图工具源码IDEA工具

    Java开发的画图工具源码,IDEA工具 在编程世界中,可视化工具是不可或缺的一部分,它们可以帮助开发者更直观地创建、编辑和理解复杂的图形结构。JHotDraw是一款基于Java的开源画图工具,它提供了丰富的图形绘制和...

    Java 画图程序

    Java画图程序是一种基于Java编程语言开发的图形用户界面(GUI)应用,它允许程序员创建、编辑和保存各种图形,包括直线、矩形和圆等基本形状。在Java中实现这样的功能,主要依赖于Java的AWT(Abstract Window ...

    java画图工具的源代码

    Java画图工具源代码分析 Java作为一种面向对象的编程语言,具有丰富的图形用户界面(GUI)库,使得开发画图工具变得相对简单。本篇将深入解析标题为"java画图工具的源代码"的项目,它展示了如何利用Java语言构建一...

    java 多功能画笔

    在Java编程语言中,开发一个“多功能画笔”应用程序涉及到许多关键知识点,这些知识点涵盖了图形用户界面(GUI)设计、事件处理、图形绘制以及可能的数据存储。以下是对这些概念的详细解释: 1. **Swing 和 AWT ...

    java画图工具(draw)

    java画图工具(draw) 有源代码 可以画多种图形

    VB开发的简易画图程序,可设置画笔粗细及颜色.rar

    在这个名为“VB开发的简易画图程序,可设置画笔粗细及颜色.rar”的压缩包中,我们将会探讨一个利用VB开发的简易画图应用程序。这个程序不仅允许用户绘制各种图形,如矩形、圆形和直线,还提供了调整画笔颜色和粗细的...

    java画图程序

    Java画图程序 本文档将对Java画图程序进行详细的解释,涵盖了三角形、线、圆、矩形等图形的绘制。 图形类的设计 在Java画图程序中,所有图形类都继承自抽象类`Shape`。抽象类`Shape`定义了抽象方法`draw(Graphics...

    java画图板

    《Java画图板》是一款基于Java语言开发的简易图形绘制软件,旨在满足日常生活和学习中的基本绘图需求。软件由菜单栏、工具栏和画图区三大部分组成,提供了丰富的功能,使用户能够方便快捷地进行图形创作。 1. **...

    Tra.rar_Java3d图形旋转_java 3d_画图_画图 java_画图 旋转

    "Tra.rar_Java3d图形旋转_java 3d_画图_画图 java_画图_旋转"这个主题主要涉及使用Java 3D进行图形绘制和旋转的操作。在这个基本的Java 3D程序中,我们可以理解以下几个关键知识点: 1. **Java 3D库**:Java 3D是...

Global site tag (gtag.js) - Google Analytics