1 31 32 package org.antlr.xjlib.appkit.gview.object; 33 34 import org.antlr.xjlib.appkit.gview.base.Rect; 35 import org.antlr.xjlib.appkit.gview.base.Vector2D; 36 import org.antlr.xjlib.appkit.gview.shape.SArrow; 37 import org.antlr.xjlib.foundation.XJXMLSerializable; 38 39 import java.awt.*; 40 41 public class GElementArrow extends GElement implements XJXMLSerializable { 42 43 protected SArrow arrow; 44 protected Vector2D target; 45 46 public GElementArrow() { 47 setArrow(new SArrow()); 48 } 49 50 public void setArrow(SArrow arrow) { 51 this.arrow = arrow; 52 } 53 54 public SArrow getArrow() { 55 return arrow; 56 } 57 58 public void setArrowLength(double length) { 59 arrow.setLength(length); 60 } 61 62 public void setSource(double x, double y) { 63 super.setPosition(x, y); 64 } 65 66 public void setTarget(double x, double y) { 67 arrow.setAnchor(x, y); 68 69 target = new Vector2D(x, y); 70 Vector2D direction = getPosition().sub(target); 71 arrow.setDirection(direction); 72 } 73 74 public void setTarget(Vector2D target) { 75 this.target = target; 76 } 77 78 public Vector2D getTarget() { 79 return target; 80 } 81 82 @Override 83 public void move(double dx, double dy) { 84 super.move(dx, dy); 85 target.shift(dx, dy); 86 arrow.getAnchor().shift(dx, dy); 87 } 88 89 @Override 90 public Rect getFrame() { 91 return new Rect(getPosition(), target, 2, 2); 92 } 93 94 @Override 95 public boolean isInside(Point p) { 96 return getFrame().contains(p); 97 } 98 99 @Override 100 public void draw(Graphics2D g) { 101 if(isVisibleInClip(g)) { 102 g.setColor(color); 103 drawShape(g); 104 } 105 } 106 107 @Override 108 public void drawShape(Graphics2D g) { 109 super.drawShape(g); 110 arrow.draw(g); 111 g.drawLine((int)getPositionX(), (int)getPositionY(), (int)target.x, (int)target.y); 112 } 113 114 } 115 | Popular Tags |