Попытка сделать массивное изображение (по сравнению с представлением сцены) перемещаться - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь заставить изображение «двигаться» с помощью клавиатуры. Изменение положения изображения внутри самой сцены. Мне удалось добавить 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);
    }

}

Я хочу использовать клавиши со стрелками для перемещения изображения. Если доступны более простые решения, они также приветствуются, если они решают ту же проблему, используя меньше или более простой код / ​​правильный синтаксис. Я просто играю с этим, пытаясь научиться делать это разными способами.

Ответы [ 2 ]

0 голосов
/ 19 января 2020

Уже есть элемент управления, который, по-видимому, обеспечивает поведение, к которому вы стремитесь: ScrollPane. Если вам не нужны полосы прокрутки, вы можете установить свойства hbarPolicy и vbarPolicy на 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 по горизонтали / вертикали. Тем не менее, обратите внимание, что вы не сможете «прокрутить», как позволяет текущий код.

0 голосов
/ 19 января 2020

Примечание: удалось исправить это, прикрепив действие setOnActionPressed () к сцене, а не к самому изображению. :-) (Глупая ошибка)

Тем не менее, если у кого-то есть идеи получше или другие способы их решения, приведите их!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...