Applet 实现一个简单的web流程图或拓扑图绘制功能

这是一个基于Applet的Java应用程序,用于在Web页面上实现简单的流程图或拓扑图绘制功能。用户可以通过选择不同形状的节点,并通过鼠标操作连接这些节点来创建图形。代码中包含了各种图形元素的加载、拖动、删除以及线条绘制的逻辑。此外,还支持动态调整图形大小和删除节点。
摘要由CSDN通过智能技术生成

1.先贴代码:

package common;

import java.applet.Applet;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.Vector;

import javax.swing.JPanel;


public class AppletRule extends Applet {
 int count=13;
 Vector v=new Vector();
 Image[] img=new Image[count];
 int myWidth=0,myHeight=0;
 int widthcount=0;
 boolean[] b=new boolean[count];
 int[] width=new int[count],height=new int[count],w=new int[count],h=new int[count],wid=new int[count],hei=new int[count],ww=new int[count],hh=new int[count];
 int startX=0,startY=0,endX=0,endY=0;
 Canvas startObj=null,endObj=null;
 String drawclear="";
 int clickX=0,clickY=0,moveX=0,moveY=0;
 canvas[] can=null;
 myCanvas[] mycan=new myCanvas[count];
 Canvas curcan=null;
 Canvas curdelcan=null;
 Image curimg=null;
 JPanel jp=new JPanel(null);
 myCanvas drawLine=new myCanvas("drawLine");
 MediaTracker mt=new MediaTracker(this);
    int wt =800;
    int ht =300;
 public void init() {
 // 加载图片,图片地址可以换自己本地的。
 img[0]=this.getImage(this.getCodeBase(),"bpmn2/large/start_empty.png");
 img[1]=this.getImage(this.getCodeBase(),"bpmn2/large/end_empty.png");
 img[2]=this.getImage(this.getCodeBase(),"bpmn2/large/end_error.png");
 img[3]=this.getImage(this.getCodeBase(),"bpmn2/large/end_terminate.png");
 img[4]=this.getImage(this.getCodeBase(),"bpmn2/large/end_cancel.png");
 img[5]=this.getImage(this.getCodeBase(),"bpmn2/large/gateway_complex.png");
 img[6]=this.getImage(this.getCodeBase(),"bpmn2/large/gateway_exclusive.png");
 img[7]=this.getImage(this.getCodeBase(),"bpmn2/large/gateway_parallel.png");
 img[8]=this.getImage(this.getCodeBase(),"bpmn2/large/intermediate_empty.png");
 img[9]=this.getImage(this.getCodeBase(),"bpmn2/large/intermediate_error.png");
 img[10]=this.getImage(this.getCodeBase(),"bpmn2/large/intermediate_message.png");
 img[11]=this.getImage(this.getCodeBase(),"bpmn2/large/intermediate_signal.png");
 img[12]=this.getImage(this.getCodeBase(),"bpmn2/large/intermediate_timer.png");
 //img[13]=this.getImage(this.getCodeBase(),"bpmn2/large/start_empty.png");
 String wtStr = this.getParameter("wt");
 String htStr = this.getParameter("ht");
 if(!"".equals(wtStr) &&!"null".equals(wtStr) && wtStr != null)
  wt = Integer.parseInt(wtStr);
 if(!"".equals(htStr) &&!"null".equals(htStr)&& wtStr != null)
  ht = Integer.parseInt(htStr);
 this.resize(wt,ht);
 this.setLayout(null);
 for(int i=0;i<img.length;i++)
   mt.addImage(img[i], 0);
 try {
   mt.waitForAll();
 } catch(Exception ex) {
  System.err.println(ex.toString());
 }
 this.add(jp);
 jp.setBounds(0,0,800,80);
 jp.add(this.drawLine);
 jp.setBackground(new Color(230,230,130)); //设置DrawLine背景
 drawLine.setBounds(5,15,90,30);
 drawLine.addMouseListener(new MouseAdapter() {
   public void mousePressed(MouseEvent e) {
     clickdrawLine(e);
   }
 });
 for(int i=0;i<img.length;i++) {
   mycan[i]=new myCanvas(img[i]);
   width[i]=img[i].getWidth(this);
   height[i]=img[i].getHeight(this);
   jp.add(mycan[i]);
   mycan[i].setBounds(100+5*(i+1)+widthcount,5,img[i].getWidth(this),img[i].getHeight(this));
   widthcount+=img[i].getWidth(this);
 }
 this.addMouseListener(new MouseAdapter() {
   public void mouseClicked(MouseEvent e) {
     clickhere(e);
   }
 });
  }

 public void clickhere(MouseEvent e) {
  if(this.curcan==null)return;
  if(e.getModifiers()==MouseEvent.BUTTON3_MASK) {
    Canvas ca=new canvas(curimg);
    this.add(ca);
    ca.setBounds(e.getX(),e.getY(),curimg.getWidth(this),curimg.getHeight(this));
    this.validate();
  }
 }

 public void clickdrawLine(MouseEvent e) {
  if(drawLine.getBackground().equals(new Color(230,230,255))) {
    drawLine.setBackground(new Color(230,230,230));
    startObj=null;
    endObj=null;
    drawclear="";
  } else {
    drawLine.setBackground(new Color(230,230,255));
    drawclear="draw";
  }
 }

 public void paint(Graphics g) {
  for(int i=0;i<v.size();i++) {
    Vector v1=(Vector)v.elementAt(i);
    startX = ((int[])v1.elementAt(1))[0] + ((int[])v1.elementAt(1))[2] / 2;
    startY = ((int[])v1.elementAt(1))[1] + ((int[])v1.elementAt(1))[3] / 2;
    endX = ((int[])v1.elementAt(1))[4] + ((int[])v1.elementAt(1))[6] / 2;
    endY = ((int[])v1.elementAt(1))[5] + ((int[])v1.elementAt(1))[7] / 2;
    g.drawLine(startX, startY, endX, endY);
    drawArrowhead(g,((Canvas[])v1.elementAt(0))[0],((Canvas[])v1.elementAt(0))[1]);
  }
 }

 public void drawArrowhead(Graphics g,Canvas startObj,Canvas endObj) {
  double xx=0,yy=0,xx1=0,yy1=0,xx2=0,yy2=0;
  myWidth=myHeight=(int)Math.pow((double)(Math.pow(endObj.getWidth(),2d)+Math.pow(endObj.getHeight(),2d)),1/2d)/2;
  xx=endX-(endX-startX)*myWidth/Math.pow((double)(endX-startX)*(endX-startX)+(double)(endY-startY)*(endY-startY),1/2d);
  yy=endY-(endY-startY)*myHeight/(Math.pow((double)(endX-startX)*(endX-startX)+(double)(endY-startY)*(endY-startY),1/2d));
  xx1=xx-20*Math.cos(Math.atan(((double)yy-startY)/((double)xx-startX))-radians(30));
  yy1=yy-20*Math.sin(Math.atan(((double)yy-startY)/((double)xx-startX))-radians(30));
  xx2=xx-20*Math.sin(radians(60)-Math.atan(((double)(yy-startY))/((double)(xx-startX))));
  yy2=yy-20*Math.cos(radians(60)-Math.atan(((double)(yy-startY))/((double)(xx-startX))));
  if(startObj.getX()+startObj.getWidth()/2>endObj.getX()+endObj.getWidth()/2) {
    xx1=xx+20*Math.cos(Math.atan(((double)yy-startY)/((double)xx-startX))-radians(30));
    yy1=yy+20*Math.sin(Math.atan(((double)yy-startY)/((double)xx-startX))-radians(30));
    xx2=xx+20*Math.sin(radians(60)-Math.atan(((double)(yy-startY))/((double)(xx-startX))));
    yy2=yy+20*Math.cos(radians(60)-Math.atan(((double)(yy-startY))/((double)(xx-startX))));
  }
  g.fillPolygon(new int[]{(int)xx2,(int)xx1,(int)xx},new int[]{(int)yy2,(int)yy1,(int)yy},3);
 }

 public double radians(int degrees) {
   return ((double)degrees)*Math.PI/180.0;
 }
//}
 //********************************************动态图标
 class canvas extends Canvas {
 Image im=null;
 public canvas(Image im) {
 super();
 this.setCursor(new Cursor(Cursor.MOVE_CURSOR));
 this.im=im;
 this.addMouseListener(new MouseAdapter() {
   public void mousePressed(MouseEvent e) {
     clickcanvas(e);
   }
 });
 this.addKeyListener(new KeyAdapter() {
   public void keyPressed(KeyEvent e) {
     if(e.getKeyCode()==KeyEvent.VK_DELETE)
       removecanvas(e);
   }
 });

 this.addMouseMotionListener(new MouseMotionAdapter() {
   public void mouseDragged(MouseEvent e) {
     movecanvas(e);
   }
 });
 }

   public void movecanvas(MouseEvent e) {
  Canvas mcan=(Canvas)e.getSource();
  int mtop=mcan.getY(),mleft=mcan.getX(),mwidth=mcan.getWidth(),mheight=mcan.getHeight();
  mcan.setBounds(mleft+e.getX()-clickX,mtop+e.getY()-clickY,mwidth,mheight);
  for(int i=0;i<v.size();i++) {
    Vector v1=(Vector)v.elementAt(i);
    if(((Canvas[])v1.elementAt(0))[0].equals(mcan)) {
      ((int[])v1.elementAt(1))[0]=mcan.getX();
      ((int[])v1.elementAt(1))[1]=mcan.getY();
      ((int[])v1.elementAt(1))[2]=mcan.getWidth();
      ((int[])v1.elementAt(1))[3]=mcan.getHeight();
    } else if(((Canvas[])v1.elementAt(0))[1].equals(mcan)) {
      ((int[])v1.elementAt(1))[4]=mcan.getX();
      ((int[])v1.elementAt(1))[5]=mcan.getY();
      ((int[])v1.elementAt(1))[6]=mcan.getWidth();
      ((int[])v1.elementAt(1))[7]=mcan.getHeight();
    }
  }
  ((AppletRule)this.getParent()).repaint();
 }

 public void removecanvas(KeyEvent e) {
  try {
    Canvas mcan=(Canvas)e.getSource();
    ((AppletRule)this.getParent()).remove(curdelcan);
    for(int i=v.size()-1;i>=0;i--) {
      Vector v1 = (Vector) v.elementAt(i);
      if(((Canvas[])v1.elementAt(0))[0].equals(mcan)||((Canvas[])v1.elementAt(0))[1].equals(mcan))
        v.removeElementAt(i);
    }
    ((AppletRule)this.getParent()).validate();
    ((AppletRule)this.getParent()).repaint();
  }catch(NullPointerException ex){return;}
 }

 
 public void clickcanvas(MouseEvent e) {
    curdelcan=(Canvas)e.getSource();
    clickX=e.getX();
    clickY=e.getY();
    ((AppletRule)this.getParent()).repaint();
    if(((AppletRule)this.getParent()).drawclear.equals(""))return;
    if(((AppletRule)this.getParent()).startObj==null&&(((AppletRule)this.getParent()).endObj==null))
      ((AppletRule)this.getParent()).startObj=(Canvas)e.getSource();
    else if(((AppletRule)this.getParent()).startObj!=null&&((AppletRule)this.getParent()).endObj==null
      &&((AppletRule)this.getParent()).startObj!=(Canvas)e.getSource()) {
      ((AppletRule)this.getParent()).endObj=(Canvas)e.getSource();
      Vector v1=new Vector();
      v1.addElement(new Canvas[]{startObj,endObj});
      v1.addElement(new int[]{startObj.getX(),startObj.getY(),startObj.getWidth(),startObj.getHeight(),endObj.getX
 
  (),endObj.getY(),endObj.getWidth(),endObj.getHeight()});
      v.addElement(v1);
      ((AppletRule)this.getParent()).drawclear="";
      ((AppletRule)this.getParent()).drawLine.setBackground(null);
      ((AppletRule)this.getParent()).startObj=null;
      ((AppletRule)this.getParent()).endObj=null;
    }
 }

 public void paint(Graphics g) {
   g.drawImage(im,0,0,this);
 }
}

//****************************************************图标工具栏
 class myCanvas extends Canvas {
 Image im=null;
 String str="";
 public myCanvas(String s) {
 super();
 this.str=s;
 }

 public myCanvas(Image im) {
  super();
  this.setCursor(new Cursor(Cursor.HAND_CURSOR));
  this.im=im;
  this.addMouseListener(new MouseAdapter() {
    public void mousePressed(MouseEvent e) {
      clickmyCanvas(e);
    }
  });
 }

   public void clickmyCanvas(MouseEvent e) {
   ((AppletRule)this.getParent().getParent()).drawLine.setBackground(null);
   ((AppletRule)this.getParent().getParent()).drawclear="";
   ((AppletRule)this.getParent().getParent()).startObj=null;
   ((AppletRule)this.getParent().getParent()).endObj=null;
   curcan=(Canvas)e.getSource();
   curimg=(Image)im;
 }

 public void paint(Graphics g) {
  if(str.equals(""))
    g.drawImage(im,0,0,this);
  else {
    g.drawString(str,20,getHeight()/2);
  }
 }
  }
}

2.   html代码,我打成了jar文件执行的。

<html>

    <title></title>
 <head></head>
 <body>
    <applet archive="AppletTest.jar" codeBase="." code="common.AppletRule.class" align="middle"
       name="AppletRule" width="800" height="400" hspace="0"></applet>

 <body>
</html>

3.插入效果图片我的淘宝店铺。

写完了,我的淘宝店铺.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值