2016-09-15 162 views
0

我現在正在嘗試使用JavaFX自學習如何使用箭頭鍵移動文本和項目。我製作了一個程序,只要按下箭頭鍵就可以在舞臺上移動文字。使用箭頭鍵移動一個圓圈 - Java

我想圍繞我的窗格移動一個圓圈而不是文本。我必須做出什麼改變才能使用箭頭鍵移動我的圈子?

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(); 
    } 

回答

2
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; 
    } 
}); 
0

就個人而言,我會在那裏你正在聽的按鍵改變。我會把它放在窗格上,因爲它在這個例子中始終是焦點。除此之外,如果你不想讓最後一個留下來,你可能需要刪除並讀取該圈子,我不在我的電腦,所以我不能確認這一點,但結果代碼看起來像這樣。

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(); 
    }