1
那麼我使用這段代碼來繪製我的圖形邊緣, 如果用戶想在流動模式下看到圖形,那麼我畫箭頭代替線條,所有工作都很完美,直到我改變窗口大小,然後箭頭開始點(x1,y1)與我的節點不同步地移動而使它們不連通,而drawLine()則完美無缺。AffineTransform
這事做的的AffineTransform?
(繪畫方法的箭頭從here通過))
void drawArrow(Graphics g1, int x1, int y1, int x2, int y2) {
Graphics2D g = (Graphics2D) g1.create();
int arrowSize = 5;
double dx = x2 - x1, dy = y2 - y1;
double angle = Math.atan2(dy, dx);
int len = (int) Math.sqrt(dx*dx + dy*dy);
AffineTransform at = AffineTransform.getTranslateInstance(x1, y1);
at.concatenate(AffineTransform.getRotateInstance(angle));
g.setTransform(at);
g.drawLine(0, 0, len, 0);
g.setStroke(new BasicStroke(1));
g.drawLine(len/3, arrowSize , len/3-3*arrowSize, 0);
g.drawLine(len/3, -arrowSize , len/3-3*arrowSize, 0);
}
給誰逛到油漆邊緣方法看起來怎麼樣:
public void paintEdge(Graphics g) {
Point uCenter = u.getCenter();
Point vCenter = v.getCenter();
g.setColor(color);
Graphics2D g2=(Graphics2D) g;
g2.setStroke(new BasicStroke(3));
if (mode==Mode.FLOW) {
int minx=Math.min(uCenter.x, vCenter.x),miny=Math.min(uCenter.y, vCenter.y);
int maxx=Math.max(uCenter.x, vCenter.x),maxy=Math.max(uCenter.y, vCenter.y);
g2.drawString(""+ f + "/" + c,10+minx + (maxx-minx)/2,10+miny+ (maxy- miny)/2);
drawArrow(g2,uCenter.x, uCenter.y, vCenter.x, vCenter.y);
} else {
g2.drawLine(uCenter.x, uCenter.y, vCenter.x, vCenter.y);
}
g2.setStroke(new BasicStroke(1));
}
爲了更好地幫助越早,張貼[SSCCE(http://sscce.org/)。 – 2012-02-02 22:54:29
真正的問題在開頭提到,代碼只是一個插圖 – 2012-02-02 22:56:27
in drawArrow你有Graphics2D g =(Graphics2D)g1.create();但我不明白爲什麼你不會只投它就像你在paintEdge – ghostbust555 2012-02-02 23:02:22