Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试使海量图像(与场景视图相比)四处移动_Java_Javafx - Fatal编程技术网

Java 尝试使海量图像(与场景视图相比)四处移动

Java 尝试使海量图像(与场景视图相比)四处移动,java,javafx,Java,Javafx,我试图用键盘使图像“移动”。在场景本身内重新定位图像。我确实成功地在图像上添加了setOnMouseClicked()并更改了位置,但它似乎无法使用箭头键。假设我做错了什么 代码如下: public class DEPImageMovement extends Application { @Override public void start(Stage primaryStage) { Pane pane = new Pane(); pane

我试图用键盘使图像“移动”。在场景本身内重新定位图像。我确实成功地在图像上添加了setOnMouseClicked()并更改了位置,但它似乎无法使用箭头键。假设我做错了什么

代码如下:

public class DEPImageMovement extends Application {

    @Override
    public void start(Stage primaryStage) {

        Pane pane = new Pane(); 
        pane.setStyle("-fx-background-color: RED");

        Image img = new Image("Images/mappy.jpg");
        final double centerX = img.getWidth()/2, centerY = img.getHeight()/2;

        ImageView imgw = new ImageView(img);
        imgw.setX(-centerX);
        imgw.setY(-centerY);
        imgw.setOnKeyPressed(a ->
        {
            switch (a.getCode())
            {
                case UP: {
                    imgw.setY(imgw.getY()-50); System.out.println("Up"); break;}

                case DOWN: {
                    imgw.setY(imgw.getY()+50); System.out.println("Down"); break;}

                case LEFT:{
                    imgw.setX(imgw.getX()-50); System.out.println("Left"); break;}

                case RIGHT:{
                    imgw.setX(imgw.getX()+50); System.out.println("Right"); break;}

                default:{
                    System.out.println("Default"); break;}
            }
        });
        pane.getChildren().add(imgw);
        Scene scene = new Scene(pane, 250 ,250);
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

}

我想使用箭头键移动图像。如果有任何更简单的解决方案可用,只要它们使用更少或更简单的代码/正确的语法来解决相同的问题,那么它们也非常受欢迎。我只是在玩弄它,试图通过多种方式学习如何做

注意:通过将setOnActionPressed()操作附加到场景而不是图像本身,成功修复了此问题。:-)(愚蠢的错误)


不过,如果有人有更好的想法或其他方法来解决这个问题,请带他们进来

已经有一个控件似乎提供了您所追求的行为:。如果不需要任何滚动条,则可以将和属性设置为。您还可以考虑将属性设置为<代码> true./P>
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.control.ScrollPane;
导入javafx.scene.control.ScrollPane.ScrollBarPolicy;
导入javafx.scene.image.ImageView;
导入javafx.stage.stage;
公共类应用程序扩展应用程序{
@凌驾
公共无效开始(阶段primaryStage){
ScrollPane root=新建滚动窗格(新建图像视图(/*您的图像*/);
setHbarPolicy(ScrollBarPolicy.NEVER);
setVbarPolicy(ScrollBarPolicy.NEVER);
root.setPannable(true);
原始阶段。设置场景(新场景(根,1000650));
primaryStage.show();
}
}
如果聚焦于
滚动窗格
(例如通过单击它),则箭头键将水平/垂直滚动
图像视图
。但是,请注意,在当前代码允许的情况下,您将无法“overscroll”