Javafx 2 将图像放在圆形视图中

Javafx 2 将图像放在圆形视图中,javafx-2,javafx-8,Javafx 2,Javafx 8,如何加载任何图像并将其放置在圆形视图中,用户可以使用鼠标将其圆形视图中的图像拖动到所需的方向。有什么控制可以做到这一点。我尝试并使用了一个充满图像的圆圈,但我无法在其中移动图像,也无法在其中选择一个视图端口。有什么想法吗?使用setClip(…)选择“视口”。 您需要自己实现拖动 大概是这样的: import javafx.application.Application; import javafx.beans.property.ObjectProperty; import javafx.bea

如何加载任何图像并将其放置在圆形视图中,用户可以使用鼠标将其圆形视图中的图像拖动到所需的方向。有什么控制可以做到这一点。我尝试并使用了一个充满图像的圆圈,但我无法在其中移动图像,也无法在其中选择一个视图端口。有什么想法吗?

使用setClip(…)选择“视口”。 您需要自己实现拖动

大概是这样的:

import javafx.application.Application;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.event.EventHandler;
import javafx.geometry.Point2D;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class ImageInCircleExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        final Pane root = new Pane();
        final ImageView imageView = new ImageView("http://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/640px-Sunset_2007-1.jpg");
        final Circle clip = new Circle(300, 200, 200);
        imageView.setClip(clip);
        root.getChildren().add(imageView);

        // enable dragging:
        final ObjectProperty<Point2D> mouseAnchor = new SimpleObjectProperty<>();
        imageView.setOnMousePressed(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                mouseAnchor.set(new Point2D(event.getSceneX(), event.getSceneY()));
            }
        });
        imageView.setOnMouseDragged(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                double deltaX = event.getSceneX() - mouseAnchor.get().getX();
                double deltaY = event.getSceneY() - mouseAnchor.get().getY();
                imageView.setLayoutX(imageView.getLayoutX() + deltaX);
                imageView.setLayoutY(imageView.getLayoutY() + deltaY);
                clip.setCenterX(clip.getCenterX() - deltaX);
                clip.setCenterY(clip.getCenterY() - deltaY);
                mouseAnchor.set(new Point2D(event.getSceneX(), event.getSceneY()));
            }
        });

        final Scene scene = new Scene(root, 600, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
导入javafx.application.application;
导入javafx.beans.property.ObjectProperty;
导入javafx.beans.property.SimpleObject属性;
导入javafx.event.EventHandler;
导入javafx.geometry.Point2D;
导入javafx.scene.scene;
导入javafx.scene.image.ImageView;
导入javafx.scene.input.MouseEvent;
导入javafx.scene.layout.Pane;
导入javafx.scene.shape.Circle;
导入javafx.stage.stage;
公共类ImageInCircleExample扩展了应用程序{
@凌驾
公共无效开始(阶段primaryStage){
最终窗格根=新窗格();
最终图像视图=新图像视图(“http://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Sunset_2007-1.jpg/640px-Sunset_2007-1.jpg");
最终圆夹=新圆(300200200);
setClip(clip);
root.getChildren().add(imageView);
//启用拖动:
final ObjectProperty mouseAnchor=新的SimpleObjectProperty();
setOnMousePressed(新的EventHandler(){
@凌驾
公共无效句柄(MouseeEvent事件){
set(新的Point2D(event.getSceneX(),event.getSceneY());
}
});
setOnMouseDrawed(新的EventHandler(){
@凌驾
公共无效句柄(MouseeEvent事件){
double deltaX=event.getSceneX()-mouseAnchor.get().getX();
double deltaY=event.getSceneY()-mouseAnchor.get().getY();
setLayoutX(imageView.getLayoutX()+deltaX);
setLayoutY(imageView.getLayoutY()+deltaY);
clip.setCenterX(clip.getCenterX()-deltaX);
clip.setCenterY(clip.getCenterY()-deltaY);
set(新的Point2D(event.getSceneX(),event.getSceneY());
}
});
最终场景=新场景(根,600400);
初级阶段。场景(场景);
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}

正是我需要的,完美!