2012-08-03 89 views
3

我正在創建一個簡單的javafx應用程序。我只想從兩個同心圓之間的區域內剪切圖像,這會改變鼠標移動中的中心座標,粘貼的對象出現在初始定義的位置,但它不響應鼠標移動。請告訴我我做錯了什麼。使用複雜形狀的javafx剪輯蒙版

我的代碼是:

public DoubleProperty xCordinate; 
public DoubleProperty yCordinate; 

@Override 
public void start(Stage primaryStage) { 

    Group root = new Group(); 
    Image image = new Image(MyClass.class 
      .getResource("Water lilies.jpg").toExternalForm()); 
    Scene scene = new Scene(root, image.getWidth(), image.getHeight(), 
      Color.WHITE); 
    ImageView view = new ImageView(); 
    view.setImage(image); 
    xCordinate = new SimpleDoubleProperty(100.0f); 
    yCordinate = new SimpleDoubleProperty(100.0f); 
    scene.setOnMouseMoved(new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent event) { 
      xCordinate.set(event.getX()); 
      yCordinate.set(event.getY()); 
      System.out.println("xCordinate " + xCordinate + " yCordinate " 
        + yCordinate); 
     } 

    }); 

    Circle c1 = new Circle(); 
    c1.centerXProperty().bind(xCordinate); 
    c1.centerYProperty().bind(yCordinate); 
    c1.setRadius(50.0f); 
    Circle c2 = new Circle(); 
    c2.centerXProperty().bind(xCordinate); 
    c2.centerYProperty().bind(yCordinate); 
    c2.setRadius(35.0f); 

    Shape mask = Path.subtract(c1, c2); 

    view.setClip(mask); 
    root.getChildren().add(view); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 

} 

回答

5

您需要更新圈子位置的每一個變化的面具剪輯。順便說一下好的應用程序。

@Override 
    public void start(Stage primaryStage) { 
     Group root = new Group(); 
     Image image = new Image(MyClass.class.getResource("Water lilies.jpg").toExternalForm()); 
     Scene scene = new Scene(root, image.getWidth(), image.getHeight(), Color.WHITE); 
     final ImageView view = new ImageView(); 
     view.setImage(image); 

     xCordinate = new SimpleDoubleProperty(100.0f); 
     yCordinate = new SimpleDoubleProperty(100.0f); 


     final Circle c1 = new Circle(); 
     c1.centerXProperty().bind(xCordinate); 
     c1.centerYProperty().bind(yCordinate); 
     c1.setRadius(50.0f); 

     final Circle c2 = new Circle(); 
     c2.centerXProperty().bind(xCordinate); 
     c2.centerYProperty().bind(yCordinate); 
     c2.setRadius(35.0f); 

     scene.setOnMouseMoved(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       xCordinate.set(event.getX()); 
       yCordinate.set(event.getY()); 
       System.out.println("xCordinate " + xCordinate + " yCordinate " + yCordinate); 
       // update mask clip 
       Shape mask = Path.subtract(c1, c2); 
       view.setClip(mask); 
      } 
     }); 

     Shape mask = Path.subtract(c1, c2); 
     view.setClip(mask); 

     root.getChildren().add(view); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    }