3

シンプルな javafx アプリケーションを作成しています。2つの同心円の間にある領域内から画像を切り取りたいだけで、マウスの動きで中心座標が変わります。切り取りされたオブジェクトは最初に定義された位置に表示されましたが、マウスの動きに反応しません。私が間違っていることを教えてください。

私のコードは次のとおりです。

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();

}
4

1 に答える 1

6

円の位置が変わるたびに、マスク クリップを更新する必要があります。ところで素敵なアプリ。

@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();
    }
于 2012-08-03T15:47:24.600 に答える