2012-04-18 168 views
0

我可以使用它的值創建一個路徑嗎?從路徑值創建路徑?

Path p=new Path(); 
p.getElements().add(new MoveTo(mouse.getX(), mouse.getY())); 
System.out.Print(p); 

這將打印

路徑@ 29f12030

我可以再次轉換到這個路徑?

回答

1

你已經創建了一個路徑,它仍然是一個路徑,你不需要轉換它。

當您致電System.out.print(p)時,您可以調用p對象的默認toString函數,該函數將內部Java引用打印到您的路徑(例如[email protected])。 如果您用自己的實現覆蓋默認的toString方法,如下面的示例所示,您的打印語句將顯示路徑的值。

public class PrintPath extends Application { 
    public static void main(String[] args) throws Exception { launch(args); } 
    @Override public void start(final Stage stage) throws Exception { 
    Path p = new PrintedPath(); 
    p.getElements().add(new MoveTo(100, 150)); 
    System.out.println(p); 
    stage.setScene(new Scene(new StackPane())); 
    stage.show(); 
    } 

    class PrintedPath extends Path { 
    @Override public String toString() { 
     StringBuilder b = new StringBuilder(); 
     for (PathElement e: getElements()) { 
     if (e instanceof MoveTo) { 
      MoveTo m = (MoveTo) e; 
      b.append("M").append(m.getX()).append(" ").append(m.getY()).append(" "); 
     } 
     // logic to display other path element types could be added here . . . 
     } 
     return "Path{ " + b.toString() + "}"; 
    } 
    } 
} 
+0

我想知道是否可以從值中創建路徑..然後我們可以通過網絡以非笨拙的方式發送數據 – 2012-04-19 00:30:47

+1

作爲一種易於序列化(以字符串)和反序列化的路徑格式,我建議使用[ SVGPath](http://docs.oracle.com/javafx/2.0/api/javafx/scene/shape/SVGPath.html)。如果您這樣做,請參閱[SVG字符串路徑格式規範](http://www.w3.org/TR/SVG/paths.html)。 – jewelsea 2012-04-19 19:20:41

1

我認爲你應該詳細說明你的應用程序體系結構中通過網絡發送數據的目的。提供一些基本的細節。根據我的理解,您想通過網絡發送一個Path實例,並能夠在另一端處理它。如果是這樣,
- 看看serialization API。閱讀關於它的帖子"How to transfer objects over network using java"。擴展Path或將其包裝到另一個類中,然後實現Serializable。
- 或者,請參閱Java Architecture for XML Binding (JAXB)。基本上通過使用它可以將對象轉換/編組爲XML字符串並通過網絡進行傳輸,然後對其進行解組。這裏是hello world example
- 或者,實施您自己的編碼/解碼機制來傳輸Path對象。

+0

我想要做什麼更新路徑使用數據庫...所以這兩個用戶可以在同一個drawin上工作..總之協作繪圖... 我首先考慮通過發送x和y位置以及路徑筆劃ñ東西..但它太笨拙..所以我認爲發送路徑值應該是有幫助的 – 2012-04-19 14:08:07