java - 尝试使巨大的图像(与场景 View 相比)移动

标签 java javafx

我正在尝试使用键盘使图像“移动”。在场景本身中重新定位图像。我确实设法在图像上添加 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);
    }

}

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

最佳答案

已经有一个控件似乎可以提供您所追求的行为:ScrollPane 。如果你不想要任何滚动条那么你可以设置hbarPolicyvbarPolicy属性为ScrollBarPolicy.NEVER 。您可能还需要考虑设置 pannable属性设置为true

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.ScrollPane.ScrollBarPolicy;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;

public class App extends Application {

  @Override
  public void start(Stage primaryStage) {
    ScrollPane root = new ScrollPane(new ImageView(/* your image */));
    root.setHbarPolicy(ScrollBarPolicy.NEVER);
    root.setVbarPolicy(ScrollBarPolicy.NEVER);
    root.setPannable(true);
    primaryStage.setScene(new Scene(root, 1000, 650));
    primaryStage.show();
  }
}

如果您将 ScrollPane 聚焦(例如通过单击它),则箭头键将水平/垂直滚动 ImageView。但请注意,您将无法按照当前代码允许的方式“过度滚动”。

关于java - 尝试使巨大的图像(与场景 View 相比)移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59805797/

相关文章:

java - 打印结果表时出现问题

java - 迭代 HashMap 并创建唯一的对象 - 试图防止重复

Javadoc 源代码标记

JavaFX:位置未设置

java - 右键单击 javaFX 中的 Pane 或 ImageView 时如何显示上下文菜单

java - Java中的MVVM无需更改模型(及其业务逻辑)

java - 在哪里可以获取 OpenJDK (Windows) 的预构建 JavaFX 库

javafx - 为什么即使 fxml 文件的路径正确,我也会收到 javafx.fxml.LoadException

java - jboss 上的 Yui 压缩器 StringIndexOutOfBoundsException

java - Maven:系统范围依赖的NoClassDefFoundError