Verschieben von Objekten in JavaFX

MD Aminul Islam 15 Februar 2024
Verschieben von Objekten in JavaFX

In diesem Artikel werden wir ein Objekt in vier Richtungen nach links, rechts, oben und unten bewegen. Zu diesem Zweck verwenden wir den folgenden Code.

Verschieben von Objekten in JavaFX

Schauen wir uns den folgenden Code an. Wir werden es später erklären.

// Importing necessary packages.
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class MoveObject extends Application {
  @Override public void start(Stage primaryStage) { // Our main method
    BallPane BallPane = new BallPane();

    HBox ButtonHolder = new HBox(5); // Create an Hbox named "ButtonHolder"
    Button LeftBtn = new Button("Left"); // Create a button that move the ball left
    Button RightBtn = new Button("Right"); // Create a button that move the ball Right
    Button UpBtn = new Button("Up"); // Create a button that move the ball Up
    Button DownBtn = new Button("Down"); // Create a button that move the ball Down
    ButtonHolder.getChildren().addAll(
        LeftBtn, RightBtn, UpBtn, DownBtn); // Contain all the button to the `ButtonHolder` Hbox

    // Create actions for the buttons
    LeftBtn.setOnAction(e -> BallPane.MoveLeft());
    RightBtn.setOnAction(e -> BallPane.MoveRight());
    UpBtn.setOnAction(e -> BallPane.MoveUp());
    DownBtn.setOnAction(e -> BallPane.MoveDown());

    BorderPane pane = new BorderPane(); // Create a BorderPane
    pane.setCenter(BallPane); // Set the BallPane to pane
    pane.setBottom(ButtonHolder); // Set the ButtonHolder to pane
    pane.setPadding(new Insets(0, 20, 0, 20)); // Apply necessary paddings
    BorderPane.setAlignment(ButtonHolder, Pos.CENTER); // Align the ButtonHolder

    Scene scene = new Scene(pane, 250, 250); // Create a scene
    primaryStage.setTitle("Move a Ball"); // Provide an application title "Move a Ball"
    primaryStage.setScene(scene); // Set the scene to stage
    primaryStage.show(); // Visualizing the stage.
  }

  public static void main(String[] args) {
    Application.launch(args);
  }
}

class BallPane extends Pane { //  Create a Pane for pane
  private double radius = 25; // Define the ball redius
  private double width = 210; // Define the ball width
  private double height = 210; // Define the ball height
  Circle Ball = new Circle(width / 2, height / 2, radius); // Calcuate the circle

  BallPane() { // Set ball properties
    Ball.setFill(Color.GREEN);
    Ball.setStroke(Color.BLACK);
    getChildren().add(Ball);
  }

  public void MoveLeft() { // Method for moving the ball left
    if (Ball.getRadius() < Ball.getCenterX()) {
      Ball.setCenterX(Ball.getCenterX() - 10);
    }
  }

  public void MoveRight() { // Method for moving the ball Right
    if (Ball.getCenterX() < width - Ball.getRadius()) {
      Ball.setCenterX(Ball.getCenterX() + 10);
    }
  }

  public void MoveUp() { // Method for moving the ball Up
    if (Ball.getRadius() < Ball.getCenterY()) {
      Ball.setCenterY(Ball.getCenterY() - 10);
    }
  }

  public void MoveDown() { // Method for moving the ball Down
    if (Ball.getCenterY() < height - Ball.getRadius()) {
      Ball.setCenterY(Ball.getCenterY() + 10);
    }
  }
}

Wir haben bereits den Zweck jeder Zeile des Codes kommentiert. Jetzt werden wir die Idee dahinter diskutieren.

Nachdem wir alle notwendigen Pakete importiert haben, haben wir unsere Hauptmethode mit einer Stage namens primaryStage erstellt. Wir haben auch eine HBox erstellt, die die erforderlichen Schaltflächen in einem Container enthält.

Danach erstellen wir Aktionen für die Schaltflächen. Und andere Teile des Codes wurden durch Befehle beschrieben.

Wir besprechen nun den Arbeitsprozess von Aktionen, die das Objekt nach links, rechts, oben und unten bewegen.

public void MoveLeft() { // Method for moving the ball left
  if (Ball.getRadius() < Ball.getCenterX()) {
    Ball.setCenterX(Ball.getCenterX() - 10);
  }
}

Die obige Methode ändert die Position des Objekts auf die linke Seite oder technisch gesehen in die -x-Richtung, wenn der Benutzer auf diese Schaltfläche klickt.

public void MoveRight() { // Method for moving the ball Right
  if (Ball.getCenterX() < width - Ball.getRadius()) {
    Ball.setCenterX(Ball.getCenterX() + 10);
  }
}

Dann ändert die oben geteilte Methode die Position des Objekts auf die rechte Seite oder, technisch gesehen, in die +x-Richtung, wenn der Benutzer auf diese Schaltfläche klickt.

public void MoveUp() { // Method for moving the ball Up
  if (Ball.getRadius() < Ball.getCenterY()) {
    Ball.setCenterY(Ball.getCenterY() - 10);
  }
}

Danach ändert die oben geteilte Methode die Position des Objekts nach oben oder technisch gesehen in die +y-Richtung, wenn der Benutzer auf diese Schaltfläche klickt.

public void MoveDown() { // Method for moving the ball Down
  if (Ball.getCenterY() < height - Ball.getRadius()) {
    Ball.setCenterY(Ball.getCenterY() + 10);
  }
}

Schließlich ändert die obige Methode die Position des Objekts auf die untere Seite oder technisch gesehen in die -y-Richtung, wenn der Benutzer auf diese Schaltfläche klickt.

Nachdem Sie den Code kompiliert und ausgeführt haben, erhalten Sie eine Ausgabe wie die folgende.

Ausgang:

javafx move shape output

Denken Sie daran, wenn Ihre IDE das automatische Einbinden von Bibliotheken nicht unterstützt. Dann müssen Sie möglicherweise die erforderlichen Bibliotheksdateien vor dem Kompilieren manuell einfügen. Andernfalls wird ein Fehler angezeigt.

MD Aminul Islam avatar MD Aminul Islam avatar

Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.

LinkedIn

Verwandter Artikel - Java JavaFX