JavaFX Ich kann keinen Kreis richtig zeichnen

Whoami95

Mitglied
Hallo,

ich habe ein Programmierproblem und komme nicht weiter. Wir sollen in unseren Programmierkurs mehrer Kreise auf eine Pane zeichnen. Ich bekomme problemlos hin, dass Kreis aufkreuzen, wenn ich auf meine Pane klicke, aber es gibt das große Problem, dass, wenn ich z.b oben Rechts einen Kreis haben möchte sie nur ganz links am Rande auftauchen und zwar immer wieder untereinandern. Ich habe mich bereits kreuz und quer durch das Internet gesucht, aber nichts richtige gefunden. Ich füge ein Bild ein, damit ihr sehen könnt, wie es bei mir aussieht. Und ich füge ein weiteres Bild ein, wo es grob aussehen könnte, wenn man einen Kreis überall zeichnen kann, wo man will.

Das ist mein Code:

[CODE lang="java" title="Das ist mein Code"]import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class CircleExample extends Application {

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

@Override
public void start(Stage primaryStage) {
VBox root = new VBox();

root.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
Circle circle = new Circle(5);
root.getChildren().add(circle);
circle.setCenterY(mouseEvent.getX());






}
});




Scene scene = new Scene(root, 400, 400);
primaryStage.setTitle("Kreis Zeichnen");
primaryStage.setScene(scene);
primaryStage.show();


}
}[/CODE]

Weiss jemand, was ich falsch mache? Danke im Voraus für Eure Hilfe.
 

Anhänge

  • Java_Forum.PNG
    Java_Forum.PNG
    3,1 KB · Aufrufe: 19
  • Java_forum_2.PNG
    Java_forum_2.PNG
    34,5 KB · Aufrufe: 20
Du setzt ja auch die x-Koordinate nicht und die y-Koordinate setzt du auf die x-Koordinate des Mausklicks ...

Setzt die Koordinaten richtig und dann sollte es gehen 🙂
 
Danke erstmal für die schnelle Antwort.

Ich habe es so ähnich bereits versucht, aber ich scheine es nicht richtig hinzubekommen. Kannst Du bitte ein Beispiel setzen, damit ich weiss, wie Du es genau meinst?
 
Java:
public void handle(MouseEvent mouseEvent) {
   Circle circle = new Circle(5);
   root.getChildren().add(circle);
circle.setCenterX(mouseEvent.getX());
circle.setCenterY(mouseEvent.getY());
}

Etwas in der Art ... halt nur auf dem Handy hier im Forum geschrieben ... ggf. noch schauen, ob getX/getY richtig sind vom Maus-Event ... da gibt es noch weitere Koordinaten, die man sich holen könnte falls die Kreise nicht an der richtigen Position landen ...
 
Versuch mal die Koordinaten zu setzen, BEVOR du den Kreis dem root hinzufügst.
Denn ich vermiss da irgendwie das FX-Äquivalent eines repaint, nachdem die Koordinaten gesetzt wurden.

Davon abgesehen kann es nicht wie am Anfang sein. Am Anfang hast du nur eine der Koordinaten - falsch - befüllt, jetzt werden beide richtig befüllt, sofern du den Vorschlag umgesetzt hast.
 
Dann gleich der zweite Fehler: Was nutzt Du denn für eine Komponente um die Kreise hinzu zu fügen? Und was zeichnet diese Komponente aus?

Edit: Als Ergänzung: Die Reihenfolge ist ok - der Code kann dann so stehen bleiben. Nur eine Zeile muss geändert werden (mit Import ggf. zwei Zeilen).
 
Hallo

Danke für die info

ich habe es geschafft

[CODE lang="java" title="Kreise Zeichnen"]import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;


public class CircleExample extends Application {

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

@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane();


root.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
Circle circle = new Circle(5);
root.getChildren().addAll(circle);
circle.setCenterX(mouseEvent.getX());
circle.setCenterY(mouseEvent.getY());






}
});



Scene scene = new Scene(root, 400, 400);
primaryStage.setTitle("Kreis Zeichnen");
primaryStage.setScene(scene);
primaryStage.show();


}
}
[/CODE]

So klappt es. Ich habe es geschafft. Mein fehler war, dass ich statt der "Borderpane" die "VBox" genutzt habe. Danke für eure Hilfe
 
Wobei Du ja ja von der BorderPane keinerlei Funktionalität benötigst, die dieser einer normalen Pane hinzufügt. Daher ist die Frage, wieso du BorderPane gewählt hast und nicht einfach Pane, von dem BorderPane abgeleitet ist.

Zumal die BorderPane ja in der Regel auch so benutzt wird, dass man den einzelnen Elementen einen spezifischen Node (Also in der Regel wieder ein Container) zuweist, daher ja auch die setXXX Methoden (setTop, setBottom, setRight, ...).

Aber das einfach nur als Anregung und als Ratschlag, sich die einzelnen Klassen noch etwas mehr im Detail anzusehen....
 

Zurück
Oben