簡體   English   中英

Java Swing移動java.awt.Shape

[英]Java Swing moving java.awt.Shape

我們有一個顯示一種地圖的應用程序。 該Swing應用程序主要使用java.awt.Graphics2D#draw(Shape)繪制一組java.awt.Shape ,一切都很好。

現在,我必須擴展此應用程序,以允許我們的用戶編輯地圖(在地圖上移動形狀)。 但是java.awt.Shape上沒有translatemove方法。 因此,我無法更改形狀的位置( java.awt.Point )。

我試圖重寫java.awt.Shape#getPathIterator以便應用與形狀位置匹配的轉換。 但這很棘手,因為此方法已經接受了我必須合並的轉換,而且還因為正確,所以PathIterator應該相對於形狀位置從(0, 0)開始。

而且無論如何,這是行不通的,因為似乎Graphics2D並不總是使用此方法來繪制java.awt.Shape

所以現在,我有點失落。 另一個解決方案是讓形狀自己繪制,但隨后我必須重寫應用程序的一部分。 這不是問題,但是我必須知道哪個可能是最佳解決方案:

  1. 找到一個技巧來移動 java.awt.Shape似乎是最好的解決方案,但我不知道該怎么做。

  2. 更改應用程序以具有自繪形狀可能不錯,但隨后我必須計算myslef的contains和其他更復雜的方法。

但是java.awt.Shape上沒有translatemove方法。

請參閱AffineTransform.createTransformedShape(Shape) ,其中:

在通過此變換對指定Shape的幾何形狀進行定義后,返回一個新的Shape對象。

當然,還有Graphics2D.translate(x,y) ..

Graphics2D上下文的原點平移到當前坐標系中的點(x,y)。 ..

您可以基於Shape來創建Area,然后調用帶有轉換坐標的AffineTransform來調用transform()。

Area a=new Area(sourceShape);
AffineTransform at=new AffineTransform();
at.translate(horizontalShift, verticalShift);
Shape transformedShape=a.transform(at);

還沒測試

@AndrewThompson的解決方案似乎是最好的解決方案。 我將嘗試一下。

對於那些感興趣的人(因為我必須進步)。 我創建了一個接口,該接口擴展了java.awt.Shape並為他的location屬性提供了一個二傳手。 每個特定的形狀都必須執行更新其位置所需的代碼,但比移動任何形狀都容易得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM