円を作成し、4つのボタン(左、右、上と下)で移動するためのコードは、その新しい位置から移動するのではなく、その開始位置(y = 0およびx = 0)から始める。円は新しい位置から開始位置から移動しません
package movetheball;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.geometry.Pos;
public class MoveTheBall extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Circle circle = new Circle();
circle.setRadius(50);
circle.setStroke(Color.BLACK);
circle.setFill(Color.WHITE);
Button btn1 = new Button();
btn1.setText("Left");
btn1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
double newY = 0;
double newX = 0;
System.out.println("Went to the left.");
newX = circle.getCenterX() - 10;
circle.setTranslateX(newX);
circle.setTranslateY(newY);
}
});
Button btn2 = new Button();
btn2.setText("Right");
btn2.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
double newY = 0;
double newX = 0;
System.out.println("Went to the right.");
newX = circle.getCenterX() + 10;
circle.setTranslateX(newX);
circle.setTranslateY(newY);
}
});
Button btn3 = new Button();
btn3.setText("Up");
btn3.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
double newY = 0;
double newX = 0;
System.out.println("Went up.");
newY = circle.getCenterY() - 10;
circle.setTranslateX(newX);
circle.setTranslateY(newY);
}
});
Button btn4 = new Button();
btn4.setText("Down");
btn4.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
double newY = 0;
double newX = 0;
System.out.println("Went down.");
System.out.println("Went up.");
newY = circle.getCenterY() + 10;
circle.setTranslateX(newX);
circle.setTranslateY(newY);
}
});
BorderPane rootPane = new BorderPane();
rootPane.setCenter(circle);
HBox hb = new HBox(btn1, btn2, btn3, btn4);
hb.setAlignment(Pos.CENTER);
rootPane.setBottom(hb);
Scene scene = new Scene(rootPane, 400, 400);
primaryStage.setTitle("Move the circle!");
primaryStage.setScene(scene);
primaryStage.show();
}
}
私はそれを、ユーザーが望む位置に移動し、その古い位置から新しい位置に移動する方法に変更しますか?
ありがとうございます!
リスナー内では、常に 'double newY = 0;'( 'x'と同じです)を実行します。サークルのx/y値をリスナーの外に保存する必要があります(例:あなたのクラスのメンバ変数の中で。 – pzaenger