SWT 2D Chart: Flowchart

SWT 2D Chart: Flowchart : 2D « SWT JFace Eclipse « Java

Flowchart.png

 

 

/* SWT/JFace in Action GUI Design with Eclipse 3.0 Matthew Scarpino, Stephen Holder, Stanford Ng, and Laurent Mihalkovic ISBN: 1932394273 Publisher: Manning */

import java.util.Enumeration;
import java.util.Hashtable;

import org.eclipse.draw2d.AbstractConnectionAnchor;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.FreeformLayeredPane;
import org.eclipse.draw2d.FreeformLayout;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.LightweightSystem;
import org.eclipse.draw2d.ManhattanConnectionRouter;
import org.eclipse.draw2d.MarginBorder;
import org.eclipse.draw2d.MouseEvent;
import org.eclipse.draw2d.MouseListener;
import org.eclipse.draw2d.MouseMotionListener;
import org.eclipse.draw2d.PolylineConnection;
import org.eclipse.draw2d.PolylineDecoration;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.PointList;
import org.eclipse.draw2d.geometry.PrecisionPoint;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Flowchart {
  public static void main(String args[]) {
    Shell shell = new Shell();
    shell.setSize(200, 300);
    shell.open();
    shell.setText("Flowchart");
    LightweightSystem lws = new LightweightSystem(shell);
    ChartFigure flowchart = new ChartFigure();
    lws.setContents(flowchart);

    TerminatorFigure start = new TerminatorFigure();
    start.setName("Start");
    start.setBounds(new Rectangle(40, 20, 80, 20));
    DecisionFigure dec = new DecisionFigure();
    dec.setName("Should I?");
    dec.setBounds(new Rectangle(30, 60, 100, 60));
    ProcessFigure proc = new ProcessFigure();
    proc.setName("Do it!");
    proc.setBounds(new Rectangle(40, 140, 80, 40));
    TerminatorFigure stop = new TerminatorFigure();
    stop.setName("End");
    stop.setBounds(new Rectangle(40, 200, 80, 20));

    PathFigure path1 = new PathFigure();
    path1.setSourceAnchor(start.outAnchor);
    path1.setTargetAnchor(dec.inAnchor);
    PathFigure path2 = new PathFigure();
    path2.setSourceAnchor(dec.yesAnchor);
    path2.setTargetAnchor(proc.inAnchor);
    PathFigure path3 = new PathFigure();
    path3.setSourceAnchor(dec.noAnchor);
    path3.setTargetAnchor(stop.inAnchor);
    PathFigure path4 = new PathFigure();
    path4.setSourceAnchor(proc.outAnchor);
    path4.setTargetAnchor(stop.inAnchor);

    flowchart.add(start);
    flowchart.add(dec);
    flowchart.add(proc);
    flowchart.add(stop);
    flowchart.add(path1);
    flowchart.add(path2);
    flowchart.add(path3);
    flowchart.add(path4);

    new Dnd(start);
    new Dnd(proc);
    new Dnd(dec);
    new Dnd(stop);

    Display display = Display.getDefault();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
  }
}

class ChartFigure extends FreeformLayeredPane {
  public ChartFigure() {
    setLayoutManager(new FreeformLayout());
    setBorder(new MarginBorder(5));
    setBackgroundColor(ColorConstants.white);
    setOpaque(true);
  }
}

class Dnd extends MouseMotionListener.Stub implements MouseListener {
  public Dnd(IFigure figure) {
    figure.addMouseMotionListener(this);
    figure.addMouseListener(this);
  }

  Point start;

  public void mouseReleased(MouseEvent e) {
  }

  public void mouseClicked(MouseEvent e) {
  }

  public void mouseDoubleClicked(MouseEvent e) {
  }

  public void mousePressed(MouseEvent e) {
    start = e.getLocation();
  }

  public void mouseDragged(MouseEvent e) {
    Point p = e.getLocation();
    Dimension d = p.getDifference(start);
    start = p;
    Figure f = ((Figure) e.getSource());
    f.setBounds(f.getBounds().getTranslated(d.width, d.height));
  }
}

class TerminatorFigure extends ActivityFigure {
  FixedAnchor inAnchor, outAnchor;

  public TerminatorFigure() {
    inAnchor = new FixedAnchor(this);
    inAnchor.place = new Point(1, 0);
    targetAnchors.put("in_term", inAnchor);
    outAnchor = new FixedAnchor(this);
    outAnchor.place = new Point(1, 2);
    sourceAnchors.put("out_term", outAnchor);
  }

  public void paintFigure(Graphics g) {
    Rectangle r = bounds;
    g.drawArc(r.x + r.width / 8, r.y, r.width / 4, r.height - 1, 90, 180);
    g.drawLine(r.x + r.width / 4, r.y, r.x + 3 * r.width / 4, r.y);
    g.drawLine(r.x + r.width / 4, r.y + r.height - 1,
        r.x + 3 * r.width / 4, r.y + r.height - 1);
    g.drawArc(r.x + 5 * r.width / 8, r.y, r.width / 4, r.height - 1, 270,
        180);
    g.drawText(message, r.x + 3 * r.width / 8, r.y + r.height / 8);
  }
}

class FixedAnchor extends AbstractConnectionAnchor {
  Point place;

  public FixedAnchor(IFigure owner) {
    super(owner);
  }

  public Point getLocation(Point loc) {
    Rectangle r = getOwner().getBounds();
    int x = r.x + place.x * r.width / 2;
    int y = r.y + place.y * r.height / 2;
    Point p = new PrecisionPoint(x, y);
    getOwner().translateToAbsolute(p);
    return p;
  }
}

class DecisionFigure extends ActivityFigure {
  FixedAnchor inAnchor, yesAnchor, noAnchor;

  public DecisionFigure() {
    inAnchor = new FixedAnchor(this);
    inAnchor.place = new Point(1, 0);
    targetAnchors.put("in_dec", inAnchor);
    noAnchor = new FixedAnchor(this);
    noAnchor.place = new Point(2, 1);
    sourceAnchors.put("no", noAnchor);
    yesAnchor = new FixedAnchor(this);
    yesAnchor.place = new Point(1, 2);
    sourceAnchors.put("yes", yesAnchor);
  }

  public void paintFigure(Graphics g) {
    Rectangle r = bounds;
    PointList pl = new PointList(4);
    pl.addPoint(r.x + r.width / 2, r.y);
    pl.addPoint(r.x, r.y + r.height / 2);
    pl.addPoint(r.x + r.width / 2, r.y + r.height - 1);
    pl.addPoint(r.x + r.width, r.y + r.height / 2);
    g.drawPolygon(pl);
    g.drawText(message, r.x + r.width / 4 + 5, r.y + 3 * r.height / 8);
    g.drawText("N", r.x + 7 * r.width / 8, r.y + 3 * r.height / 8);
    g.drawText("Y", r.x + r.width / 2 - 2, r.y + 3 * r.height / 4);
  }
}

class PathFigure extends PolylineConnection {
  public PathFigure() {
    setTargetDecoration(new PolylineDecoration());
    setConnectionRouter(new ManhattanConnectionRouter());
  }
}

class ProcessFigure extends ActivityFigure {
  FixedAnchor inAnchor, outAnchor;

  public ProcessFigure() {
    inAnchor = new FixedAnchor(this);
    inAnchor.place = new Point(1, 0);
    targetAnchors.put("in_proc", inAnchor);
    outAnchor = new FixedAnchor(this);
    outAnchor.place = new Point(1, 2);
    sourceAnchors.put("out_proc", outAnchor);
  }

  public void paintFigure(Graphics g) {
    Rectangle r = bounds;
    g.drawText(message, r.x + r.width / 4, r.y + r.height / 4);
    g.drawRectangle(r.x, r.y, r.width - 1, r.height - 1);
  }
}

abstract class ActivityFigure extends Figure {
  Rectangle r = new Rectangle();

  Hashtable targetAnchors = new Hashtable();

  Hashtable sourceAnchors = new Hashtable();

  String message = new String();

  public void setName(String msg) {
    message = msg;
    repaint();
  }

  public ConnectionAnchor ConnectionAnchorAt(Point p) {
    ConnectionAnchor closest = null;
    long min = Long.MAX_VALUE;
    Hashtable conn = getSourceConnectionAnchors();
    conn.putAll(getTargetConnectionAnchors());
    Enumeration e = conn.elements();
    while (e.hasMoreElements()) {
      ConnectionAnchor c = (ConnectionAnchor) e.nextElement();
      Point p2 = c.getLocation(null);
      long d = p.getDistance2(p2);
      if (d < min) {
        min = d;
        closest = c;
      }
    }
    return closest;
  }

  public ConnectionAnchor getSourceConnectionAnchor(String name) {
    return (ConnectionAnchor) sourceAnchors.get(name);
  }

  public ConnectionAnchor getTargetConnectionAnchor(String name) {
    return (ConnectionAnchor) targetAnchors.get(name);
  }

  public String getSourceAnchorName(ConnectionAnchor c) {
    Enumeration e = sourceAnchors.keys();
    String name;
    while (e.hasMoreElements()) {
      name = (String) e.nextElement();
      if (sourceAnchors.get(name).equals(c))
        return name;
    }
    return null;
  }

  public String getTargetAnchorName(ConnectionAnchor c) {
    Enumeration e = targetAnchors.keys();
    String name;
    while (e.hasMoreElements()) {
      name = (String) e.nextElement();
      if (targetAnchors.get(name).equals(c))
        return name;
    }
    return null;
  }

  public ConnectionAnchor getSourceConnectionAnchorAt(Point p) {
    ConnectionAnchor closest = null;
    long min = Long.MAX_VALUE;
    Enumeration e = getSourceConnectionAnchors().elements();
    while (e.hasMoreElements()) {
      ConnectionAnchor c = (ConnectionAnchor) e.nextElement();
      Point p2 = c.getLocation(null);
      long d = p.getDistance2(p2);
      if (d < min) {
        min = d;
        closest = c;
      }
    }
    return closest;
  }

  public Hashtable getSourceConnectionAnchors() {
    return sourceAnchors;
  }

  public ConnectionAnchor getTargetConnectionAnchorAt(Point p) {
    ConnectionAnchor closest = null;
    long min = Long.MAX_VALUE;
    Enumeration e = getTargetConnectionAnchors().elements();
    while (e.hasMoreElements()) {
      ConnectionAnchor c = (ConnectionAnchor) e.nextElement();
      Point p2 = c.getLocation(null);
      long d = p.getDistance2(p2);
      if (d < min) {
        min = d;
        closest = c;
      }
    }
    return closest;
  }

  public Hashtable getTargetConnectionAnchors() {
    return targetAnchors;
  }
}

class FigureFactory {
  public static IFigure createTerminatorFigure() {
    return new TerminatorFigure();
  }

  public static IFigure createDecisionFigure() {
    return new DecisionFigure();
  }

  public static IFigure createProcessFigure() {
    return new ProcessFigure();
  }

  public static PathFigure createPathFigure() {
    return new PathFigure();
  }

  public static ChartFigure createChartFigure() {
    return new ChartFigure();
  }
}


         

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

[출처] http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/SWT2DChartFlowchart.htm

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
49 JAVA SWT TEST 자료 졸리운_곰 2015.05.07 545
48 [SWING] 분석에 도전해볼만한 오픈소스 WebHarvest Java WebCrawler GUI file 졸리운_곰 2015.05.20 517
47 [SWT] MessageBox Example file 졸리운_곰 2015.08.16 380
46 SWT JAVA 동적으로 컨트롤을 추가하는 다이얼로그 졸리운_곰 2015.04.27 271
45 Demonstrates TreeViewer file 졸리운_곰 2015.08.05 258
44 JAVA SWT XML EDITOR sample : 자바 SWT XML 에디터 예제 file 졸리운_곰 2015.05.12 241
» SWT 2D Chart: Flowchart : 2D « SWT JFace Eclipse « Java file 졸리운_곰 2015.07.28 232
42 SWT 스크롤 ScrolledComposite file 졸리운_곰 2015.05.03 230
41 [SWT, Java], Button by Image, 이미지로 버튼 생성 졸리운_곰 2015.08.22 204
40 SWT Control in One Example file 졸리운_곰 2015.08.10 193
39 SWT Tree With Multi columns file 졸리운_곰 2015.08.06 152
38 JAVA SWT 대화상자 예제 : 동적으로 컨트롤을 추가하고 삭제하는 예제 졸리운_곰 2015.05.11 140
37 SWT JAVA 동적으로 컨트롤을 추가하는 다이얼로그2 file 졸리운_곰 2015.04.27 139
36 A simple Java console: 졸리운_곰 2015.04.24 131
35 Use of Java2D on SWT or Draw2D graphical context : 2D « SWT JFace Eclipse « Java file 졸리운_곰 2015.07.28 130
34 Java SWT 소개 file 졸리운_곰 2015.03.30 127
33 JAVA SWT LINUX (Ubuntu) 에서 SWT Browser Control 사용시 졸리운_곰 2015.05.10 120
32 Eclipse RCP Tutorial: How to Add a Progress Bar file 졸리운_곰 2015.11.07 119
31 Building and delivering a table editor with SWT/JFace file 졸리운_곰 2019.06.16 110
30 Demonstrates TreeEditor : Tree « SWT JFace Eclipse « Java file 졸리운_곰 2015.07.28 109
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED