Hallo,
folgendes Problem besteht. In der Methode 'handleMouseClicked' in der verschachtelten if-Bedingung
verbindet er die Kreise nicht miteinander. Kann mir evtl. jemand weiterhelfen? Ich habe im weiteren, zusätzlichen Code hinzugefügt für das bessere Verständnis.
Vielen Dank im Voraus.
folgendes Problem besteht. In der Methode 'handleMouseClicked' in der verschachtelten if-Bedingung
Java:
if(kreis.klickanzahl == 1 )
{
kreis.setFill(Color.BLUE);
kreis.setFarbe(Color.BLUE);
if( letzterKreis.getColor() == vorletzterKreis.getColor())
kreiseVerbinden(vorletzterKreis, kreis);
}
Java:
private class Kreis extends Circle
{
private Color farbe;
private int klickanzahl=0;
private int kantenanzahl =0;
public Kreis ( double xpos, double ypos, int CN , int KN, Color f)
{
// Von Superklasse Circle geerbt
this.setCenterX(xpos);
this.setCenterY(ypos);
this.setRadius(RADIUS);
this.setFill(Color.GREEN);
farbe = f;
klickanzahl = CN;
kantenanzahl = KN;
}
public Color setFarbe(Color Farbe)
{
return farbe = Farbe;
}
public Color getColor()
{
return farbe;
}
void erhoeheCN()
{
klickanzahl = klickanzahl + 1;
}
void erhoeheKN(){
kantenanzahl = kantenanzahl + 1;
}
}
Java:
@FXML
public void handleMouseClicked(MouseEvent event)
{
// Anzahl der Klicks pro Knoten sollen gemerkt werden
for(Kreis kreis:kreise)
{
letzterKreis = null;
vorletzterKreis = null;
if(kreis.isClicked(event.getX(), event.getY()))
{
vorletzterKreis = letzterKreis;
letzterKreis = kreis;
kreis.erhoeheCN();
System.out.println(kreis.klickanzahl);
if(kreis.klickanzahl == 1 )
{
kreis.setFill(Color.BLUE);
kreis.setFarbe(Color.BLUE);
if( letzterKreis.getColor() == vorletzterKreis.getColor())
kreiseVerbinden(vorletzterKreis, kreis);
}
else
{
kreis.klickanzahl = kreis.klickanzahl - 2;
kreis.setFill(Color.GREEN);
System.out.println(kreis.klickanzahl);
}
}
}
Java:
@FXML
public void handleNeuesProblemButton(ActionEvent event)
{
paneCircles.setDisable(false); // die Zeichenfläche wird (wieder) aktiv
// Kreise neu generieren und platzieren
if(start)
{
start = false;
neuesProblem();
}
else
{
kreise.clear();
//zahlen.clear();
letzterKreis = null;
KnotenAnzahlAendern();
// da nur die Kreise der Pane gehören, können wir alle Elemente entfernen
paneCircles.getChildren().removeAll(paneCircles.getChildren());
}
// platziere neue Kreise mit Zahlen
kreiseZeichnen();
}
Java:
public void neuesProblem()
{
TextInputDialog dialog = new TextInputDialog("");
dialog.setTitle ("Neues Problem");
dialog.setHeaderText("Spielhinweis: Grüner Punkt ist Start- und Zielknoten.");
dialog.setContentText("Wieviele Knoten möchten Sie verbinden?");
Optional<String> result = dialog.showAndWait();
result.ifPresent(anzahlKnoten -> System.out.println("Anzahl der Knoten " + anzahlKnoten));
anzahlKnoten = Integer.parseInt(result.get());
}
public void KnotenAnzahlAendern()
{
Alert alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle("Auswahl von Anzahl der Knoten");
alert.setContentText("Möchten Sie die Anzahl der Knoten ändern?");
ButtonType buttonTypeJa = new ButtonType("Ja");
ButtonType buttonTypeNein = new ButtonType("Nein",ButtonData.CANCEL_CLOSE);
Optional<ButtonType> result = alert.showAndWait();
if(result.get() == buttonTypeJa)
{
neuesProblem();
}
}
Java:
public void kreiseVerbinden(Kreis letzterKreis, Kreis vorletzterKreis) {
Line path = new Line(letzterKreis.getCenterX(),letzterKreis.getCenterY(),vorletzterKreis.getCenterX();
vorletzterKreis.getCenterY());
path.setStrokeWidth(5.);
path.setStroke(Color.BLACK);
paneCircles.getChildren().add(path);
// Kreise auf den Linien zeichnen
// Zuerst alle entfernen, dann alle hinzufuegen
paneCircles.getChildren().removeAll(kreise);
paneCircles.getChildren().addAll(kreise);
}