您的位置:首页 > 移动开发

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

2012-06-06 15:29 639 查看
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.插入效果图片我的淘宝店铺。


写完了,我的淘宝店铺.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐