【问题标题】:Move a circle using arrow keys - Java使用箭头键移动圆圈 - Java
【发布时间】:2016-09-15 13:06:22
【问题描述】:

我现在正在试验 JavaFX,教自己如何使用箭头键移动文本和项目。我制作了一个程序,如果按下箭头键,它只会在舞台上移动文本。

我想让一个圆圈围绕我的窗格而不是文本移动。我必须进行哪些更改才能使用箭头键移动我的圈子?

public void start(Stage primaryStage) {
        Pane pane = new Pane();

        int dx = 50;
        int dy = 50;
        int radius = 125;

        Circle circle = new Circle(radius,dx,dy);
        Text text = new Text(20,20,"HI");
        circle.setFill(Color.WHITE);
        circle.setStroke(Color.BLACK);

        pane.getChildren().addAll(circle, text);

        circle.setOnKeyPressed(e -> {
            switch(e.getCode()) {
            case DOWN: text.setY(text.getY() + 10);
            break;
            case UP: text.setY(text.getY() - 10);
            break;
            case LEFT: text.setX(text.getX() - 10);
            break;
            case RIGHT: text.setX(text.getX() + 10);
            break;
            default:
                if(Character.isLetterOrDigit(e.getText().charAt(0)))
                    text.setText(e.getText());
            break;      
            }
        });

        Scene scene = new Scene(pane, 250, 200);
        primaryStage.setTitle("Arrow Keys");
        primaryStage.setScene(scene);
        primaryStage.show();

        text.requestFocus();
    }

【问题讨论】:

    标签: java javafx


    【解决方案1】:
    scene.setOnKeyPressed(e -> {
        switch (e.getCode()) {
        case DOWN:
            circle.setCenterY(circle.getCenterY() + 10);
            break;
        case UP:
            circle.setCenterY(circle.getCenterY() - 10);
            break;
        case LEFT:
            circle.setCenterX(circle.getCenterX() - 10);
            break;
        case RIGHT:
            circle.setCenterX(circle.getCenterX() + 10);
            break;
        }
    });
    

    【讨论】:

      【解决方案2】:

      就我个人而言,我会改变你在哪里听按键。我会把它放在窗格上,因为在这个例子中它始终是焦点。除此之外,如果您不希望最后一个留下,您可能必须删除并重新读取圆圈,我不在我的电脑上,所以我无法确认这一点,但生成的代码看起来像这样。

      public void start(Stage primaryStage) {
              Pane pane = new Pane();
      
              int dx = 50;
              int dy = 50;
              int radius = 125;
      
              Circle circle = new Circle(radius,dx,dy);
              Text text = new Text(20,20,"HI");
              circle.setFill(Color.WHITE);
              circle.setStroke(Color.BLACK);
      
              pane.getChildren().addAll(circle, text);
      
              pane.setOnKeyPressed(e -> {
                  pane.getChildren().remove(circle);
                  switch(e.getCode()) {
                  case DOWN: circle.setCenterY(circle.getCenterY() + 10);
                  break;
                  case UP: circle.setCenterY(circle.getCenterY() - 10);
                  break;
                  case LEFT: circle.setCenterX(circle.getCenterX() + 10);
                  break;
                  case RIGHT: circle.setCenterX(circle.getCenterX() - 10);
                  break;    
                  }
                  pane.getChildren().add(circle);
              });
      
              Scene scene = new Scene(pane, 250, 200);
              primaryStage.setTitle("Arrow Keys");
              primaryStage.setScene(scene);
              primaryStage.show();
          }
      

      【讨论】: