⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graphitemcontinue.java

📁 JGraph扩展应用。自定义Renderer,自定义视图View实现自定义工作流控件
💻 JAVA
字号:
package flow.graph.gui.graph.item;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.Arc2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;


import org.jgraph.graph.CellViewRenderer;
import org.jgraph.graph.GraphConstants;
import org.jgraph.graph.VertexRenderer;
import org.jgraph.graph.VertexView;

public class GraphItemContinue extends GraphVertexView {
	public static transient ContinueRenderer renderer = new ContinueRenderer();
	public static float xWIDTH = 1/7;
	public static float xHEIGHT = 1/2;
	public static float xSEPERATOR = xWIDTH/2;
	
	public GraphItemContinue() {
		super();
	}

	public GraphItemContinue(Object cell) {
		super(cell);
	}

	/**
	 * Returns the intersection of the bounding rectangle and the straight line
	 * between the source and the specified point p. The specified point is
	 * expected not to intersect the bounds.
	 */
	// todo public Point2D getPerimeterPoint(Point source, Point p) {
	/**
	 * getArcSize calculates an appropriate arc for the corners of the rectangle
	 * for boundary size cases of width and height
	 */
	public static int getArcSize(int width, int height) {
		int arcSize;
		if (width <= height) {
			arcSize = height / 10;
			if (arcSize > (width / 5)) {
				arcSize = width / 5;
			}
		} else {
			arcSize = width / 10;
			if (arcSize > (height / 5)) {
				arcSize = height / 5;
			}
		}	
		return arcSize;
	}

	public CellViewRenderer getRenderer() {
		return renderer;
	}

	public static class ContinueRenderer extends GraphVertexRender {

		/**
		 * Return a slightly larger preferred size than for a rectangle.
		 */
		public Dimension getPreferredSize() {
			Dimension d = super.getPreferredSize();
			d.width += d.height / 5;
			//System.out.println("d1="+d);
			return d;
		}

		public void paint(Graphics g) {
			int b = borderWidth;
			Graphics2D g2 = (Graphics2D) g;
			//g2.setFont(new Font("SansSerif", Font.PLAIN, 10));      // select font
			g2.setStroke(new BasicStroke(1.3f));                    // 2 pixel lines
			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,    // antialiasing
					   RenderingHints.VALUE_ANTIALIAS_ON);

			//g2.translate(1, 1);                                   // margins
			Dimension d = getSize();
			int roundRectArc = GraphItemGroup.getArcSize(d.width - b,d.height - b);
			//System.out.println(d+",arc="+roundRectArc);
			//Shape sp = new RoundRectangle2D.Float(b / 2, b / 2, d.width - (int) (b * 1.5),
			//		d.height - (int) (b * 1.5), roundRectArc, roundRectArc);
			Shape sp = new RoundRectangle2D.Float(b/2+1, b/2+1, d.width-(int)(b*3), d.height-(int)(b*3), roundRectArc, roundRectArc);
			RoundRectangle2D rr = (RoundRectangle2D)sp;
			
			boolean tmp = selected;
		    //g2.setColor(Color.yellow);            // Set a color
		    //g2.fill(sp);                   // Fill the shape with it
		    g2.setColor(Color.LIGHT_GRAY);             // Switch to black
		    g2.draw(sp);                   // Outline the shape with it
			g2.setPaint(new GradientPaint(b/2+1, b/2+1,new Color(232,232,232),(int) (b * 3), d.height - (int) (b * 3), new Color(245, 251, 140) ));
			g2.fill(sp);
			//添加双竖线
			paintContinue(g);

			try {
				//setBorder(new JGraphShadowBorder());
				setBorder(null);
				setOpaque(false);
				selected = false;
				
				super.paint(g);
			} finally {
				selected = tmp;
			}
		}
		
		public void paintContinue(Graphics g){
			Graphics2D g2 = (Graphics2D)g;
			Dimension d = getSize();
			
			int sep = d.width/10;
			int[] x = new int[3];
			int[] y = new int[3];
			x[0]=d.width/4+sep;y[0]=d.height/4;
			x[1]=d.width/4*3+sep;y[1]=d.height/2;
			x[2]=d.width/4+sep;y[2]=d.height/4*3;
			Shape sp = new Polygon(x,y,3);
			g2.setColor(Color.YELLOW);
			g2.draw(sp);
			g2.setColor(Color.GREEN);
			g2.fill(sp);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -