Déplacer un cercle à l'aide des touches fléchées-Java


J'expérimente JavaFX en ce moment en m'enseignant comment déplacer du texte et des éléments à l'aide des touches fléchées. J'ai fait un programme qui déplace simplement le texte autour de la scène si une touche fléchée est enfoncée.

Je voudrais faire bouger un cercle autour de mon volet au lieu de texte. Quels changements dois-je faire pour déplacer mon cercle à l'aide des touches fléchées?

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();
    }
Author: chris, 2016-09-15

2 answers

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
Author: gearquicker, 2016-09-15 05:02:31

Personnellement, je changerais où vous écoutez la pression sur la touche. Je le mettrais sur le volet, car il est toujours au point dans cet exemple. En dehors de cela, vous devrez peut-être supprimer et lire le cercle si vous ne vouliez pas que le dernier reste, je ne suis pas sur mon ordinateur, donc je ne peux pas le confirmer, mais le code résultant ressemblerait à ceci.

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();
    }
 0
Author: Hypnic Jerk, 2016-09-15 05:06:22