Verbindung von Zwei Kreisen löschen !

Playermagier

Mitglied
Hallo Leute,
mein Problem besteht darin, dass ich eine Verbindung zwischen zwei Kreisen löschen möchte. Dies soll der untere Code durchführen.
Java:
paneCircles.getChildren().remove(path);
Desweiteren wird unten wichtige Code abschnitte gezeigt was vll relevant sein kein.

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);
       // Zahlenkreise auf den Linien zeichnen
       // Zuerst alle entfernen, dann alle hinzufuegen
       paneCircles.getChildren().removeAll(kreise);
       paneCircles.getChildren().addAll(kreise);
       
   }
paneCircles.getChildren().addAll(zahlen);

Java:
public void kanteLoeschen(Line path, Kreis letzterKreis, Kreis vorletzterKreis)
       {
           if (letzterKreis.getColor().equals(vorletzterKreis.getColor()))
           {
               System.out.println("Lösche dich doch du line");
               paneCircles.getChildren().remove(path);
               letzterKreis.verringerKantenanzahl();
               vorletzterKreis.verringerKantenanzahl();
           }
       }
 
X

Xyz1

Gast
Ein Kreis/Linie wird gelöscht, indem er nicht gezeichnet wird. :D
Wir können das natürlich nur beurteilen, wenn du dein komplettes Programm postest - insofern möglich.
 

Playermagier

Mitglied
Hier der Vollständiger Code:
Java:
package application.view;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import javax.swing.plaf.synth.SynthOptionPaneUI;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonBar.ButtonData;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextInputDialog;
import javafx.scene.effect.Light.Point;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;

public class Handlungsreisender_Controller {
   /* fx-Komponenten */
   @FXML private Button neuesProblemButton;
   @FXML private Button loesungVergleichenButton;
   @FXML private Button loesungAnzeigenButton;
   @FXML private Menu programmMenu;
   @FXML private MenuItem neuesProblemMenuItem;
   @FXML private MenuItem beendenMenuItem;
   @FXML private Menu hilfeMenu;
   @FXML private MenuItem zielMenuItem;
   @FXML private MenuItem ueberMenuItem;
   @FXML private AnchorPane paneCircles;

   // Zahlenkreise, die auf der Oberfläche gezeichnet werden
   static final double RADIUS = 15;   // Radius eines Zahlenkreises
   // Liste mit Kreisen, die gezeichnet werden
   private List<Kreis> kreise = new ArrayList<Kreis>();
   private Kreis letzterKreis = null;
   private Kreis vorletzterKreis = null;

   private boolean start = true;

   public int anzahlKnoten;

   /**
    * Alert-Fenster mit Spielhinweis und Angabe von Knoten
    */
   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)
       {
           System.out.println("Kackvogel");
           neuesProblem();
       }

   }

   /**
    * Handler für neuesProblemButton:
    * Die Kreise verschwinden
    * @param event
    */
   @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();
   }


   /**
    * Durchs Klicken sollen die Kreise in der Reihenfolge verbunden werden
    * @param event
    */
   @FXML
   public void handleMouseClicked(MouseEvent event) {
       for(Kreis kreis:kreise){

           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(vorletzterKreis != null )
                           {
                               System.out.println("kurz vor concet");
                               kreiseVerbinden(vorletzterKreis, letzterKreis);
                               if( (vorletzterKreis.getKantenanzahl() < 2) && (letzterKreis.getKantenanzahl() < 2))
                               {
                                   vorletzterKreis.erhoeheKN();
                                   letzterKreis.erhoeheKN();
                               }
                           }
                   break;
               }
               else {
                   kreis.klickanzahl = kreis.klickanzahl - 2;
                   kreis.setFill(Color.GREEN);
                   System.out.println(kreis.klickanzahl);
                   kreis.kanteLoeschen(kreis.path, letzterKreis, vorletzterKreis);
               }
               break;

           }
      }
}
   /**
    *  platziere Kreise mit Zahlen
    */
   void kreiseZeichnen() {
       for(int i = 1; i <= anzahlKnoten; i++) {

           // Mittel des Kreises
           Point koord = new Point();
           positionZuweisen(koord);
           Kreis kreis = new Kreis( koord.getX(), koord.getY(), 0, 0, Color.GREEN);
           kreise.add(kreis);
       }
       // Kreise auf die Pane platzieren
       paneCircles.getChildren().addAll(kreise);
  
   }

   /**
    * Eine zufaellige und zulaessige Position eines Kreises wird zugewiesen
    * @param Koordinaten, an die die Position uebergeben wird
    */
   private void positionZuweisen(Point koord) {
       double x = (int) (Math.random() * (paneCircles.getPrefWidth() - 2*RADIUS -10) + RADIUS +5);
       double y = (int) (Math.random() * (paneCircles.getPrefHeight() - 2*RADIUS -10) + RADIUS +5);

       // pruefe, ob sich Kreise nicht ueberlappen, sonst neue Position
       boolean newPosition = false;
       while( !newPosition ) {
           boolean newCheck = false;
           for(Kreis kreis: kreise) {
               if( Math.abs(kreis.getCenterX() - x) < 40 && Math.abs(kreis.getCenterY() - y) < 40 ) {
                   if( Math.abs(kreis.getCenterX() - x) < 40 )
                           x = (int) (Math.random() * (paneCircles.getPrefWidth() - 2 * RADIUS) + RADIUS);
                   else
                           y = (int) (Math.random() * (paneCircles.getPrefHeight() - 2 * RADIUS) + RADIUS);
                   newCheck = true;
                   break;
               }
           }
           newPosition = !newCheck;
       }
       // Wenn die Schleife beendet ist, gibt es eine zulaessige Position
       koord.setX(x);
       koord.setY(y);
   }

   /**
    * Innere Klasse zur Darstellung der Kreise mit Zahlen
    * Sie erweitert die Klasse Circle (Shape)
    */
   private class Kreis extends Circle{
       Line path;
       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;
        }
      
        void verringerKantenanzahl()
        {
            kantenanzahl = kantenanzahl -1;
        }
      
        public int getKlickanzahl()
        {
               return klickanzahl;
        }
      
        public int getKantenanzahl()
        {
               return kantenanzahl;
        }
      
        void setPath(Line Lpath){
            path = Lpath;
        }
      
        public Line getPath()
        {
               return path;
        }
      
       // Wurde der Kreis getroffen?
       public boolean isClicked(double x, double y){
           return Math.abs(x - this.getCenterX()) < RADIUS + 5. && Math.abs(y - this.getCenterY()) < RADIUS + 5;
       }
      
       public void kanteLoeschen(Line path, Kreis letzterKreis, Kreis vorletzterKreis)
       {
           if (letzterKreis.getColor().equals(vorletzterKreis.getColor()))
           {
               System.out.println("Lösche dich doch du line");
               paneCircles.getChildren().remove(path);
               letzterKreis.verringerKantenanzahl();
               vorletzterKreis.verringerKantenanzahl();
           }
          
       }
      
   }
   /**
    * Der zuletzt (richtig) angeklickte Kreis soll mit dem letzten verbunden werden
    * @param letzter Kreis
    * @param neuer Kreis
    */
   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);
      
       // Zuerst alle entfernen, dann alle hinzufuegen
       paneCircles.getChildren().removeAll(kreise);
       paneCircles.getChildren().addAll(kreise); 
   }
}
 

Harry Kane

Top Contributor
Du rufst an keiner Stelle die setPath-methode von deiner Kreisklasse auf. Deshalb sollte path bei allen Kreisinstanzen null sein, und paneCircles.getChildren().remove(path) ist gleichbedeutend mit paneCircles.getChildren().remove(null).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M FTP-Verbindung mit Apache Commons Net Java Basics - Anfänger-Themen 5
T User input in Verbindung mit ChronoUnit anpassen und falls falsche Eingabe getätigtwird Java Basics - Anfänger-Themen 7
D Verbindung zu xampp Java Basics - Anfänger-Themen 4
C SFTP Verbindung nicht möglich Java Basics - Anfänger-Themen 4
G Socket Verbindung aufbauen Java Basics - Anfänger-Themen 11
I Best Practice Saubere Verbindung zwischen API und Business Layer mit DTO's Java Basics - Anfänger-Themen 2
B Quicksort in Verbindung mit einem Projekt Java Basics - Anfänger-Themen 1
S Verbindung von einer Excel Datei zu Java-- Java Basics - Anfänger-Themen 4
R Error, wenn mehrere Clients gleichzeitig die Verbindung beenden Java Basics - Anfänger-Themen 16
R Keine Verbindung mit MariaDB Java Basics - Anfänger-Themen 18
M Datenbank verbindung Java Basics - Anfänger-Themen 19
J Java Verbindung mit mysql Datenbank Java Basics - Anfänger-Themen 3
R Keine Verbindung zu MySql über Netbeans Java Basics - Anfänger-Themen 15
R Input/Output Verbindung mit mySql-Datenbank Java Basics - Anfänger-Themen 9
J toString-Methode in Verbindung mit varArgs-Konstruktor Java Basics - Anfänger-Themen 18
B Wie steht UML mit Java in Verbindung? Java Basics - Anfänger-Themen 1
P Schleife für insert() und delete() im StringBuilder in Verbindung mit indexOf() Java Basics - Anfänger-Themen 7
D Eine MySQL Verbindung in mehreren Klassen Java Basics - Anfänger-Themen 8
Meeresgott OOP Socket Verbindung richtig Kapseln Java Basics - Anfänger-Themen 0
V Was bewirkt das Schlüsselwort extends in Verbindung mit class bzw. public class ? Java Basics - Anfänger-Themen 2
N httpclient - Verbindung hängt ? Java Basics - Anfänger-Themen 13
P Interface Verbindung GUI zum Programm Java Basics - Anfänger-Themen 2
V Arrays aus eigener Klasse erstellt, zuweisung aber spuckt Fehler in verbindung mit main Methode aus. Java Basics - Anfänger-Themen 3
A Erste Schritte Verbindung zu MySQL Datenbank herstellen Java Basics - Anfänger-Themen 7
M Junit Tests durchführen, die eine Verbindung zu einer Daten erfordern Java Basics - Anfänger-Themen 3
E mit java-anwendung internet verbindung unterbrechen Java Basics - Anfänger-Themen 5
L Verbindung von Anwendung mit GUI Java Basics - Anfänger-Themen 6
M Keine Datenbank verbindung Java Basics - Anfänger-Themen 14
S Https Verbindung aufbauen zum File Download Java Basics - Anfänger-Themen 7
H Problem mit Regex in Verbindung mit BufferedReader Java Basics - Anfänger-Themen 4
P Zugriff auf Attribute einer Klasse, zu der keine Verbindung besteht Java Basics - Anfänger-Themen 11
S Fehler beim Auslösen des ActionListeners in Verbindung mit einer Queue Java Basics - Anfänger-Themen 5
T socket.close aber verbindung besteht noch Java Basics - Anfänger-Themen 4
S Datentypen Regex in Verbindung mit einem Integer Wert Java Basics - Anfänger-Themen 3
E Input/Output Socket bekommt keine Verbindung bei funktionierendem Fremdziel Java Basics - Anfänger-Themen 2
0 Postgres verbindung Java Basics - Anfänger-Themen 4
F Verbindung zu MySql Datenbank Java Basics - Anfänger-Themen 4
B Verbindung zu einen anderen Rechner Java Basics - Anfänger-Themen 2
B Derby-Java-Verbindung Java Basics - Anfänger-Themen 2
I Datenbank - nach erster Verbindung keine Verbindung mehr Java Basics - Anfänger-Themen 3
J Access-Verbindung Java Basics - Anfänger-Themen 2
H Probleme mit .Jar in Verbindung mit Bildern Java Basics - Anfänger-Themen 10
S Verbindung Klassen<-> Klassen/DB Java Basics - Anfänger-Themen 2
E DB-Verbindung zu OpenOffice: Base Java Basics - Anfänger-Themen 3
J VPN Verbindung Java Basics - Anfänger-Themen 6
M Verbindung zu einem Server über Eclipse Java Basics - Anfänger-Themen 6
G FTP Verbindung in Applet Java Basics - Anfänger-Themen 3
S Java Applet - Verbindung zum Eigenen Server Java Basics - Anfänger-Themen 2
J DB-Verbindung Java Basics - Anfänger-Themen 2
TiME-SPLiNTER mehrere HTTPRequests mit selber Verbindung Java Basics - Anfänger-Themen 2
F Peer-to-Peer Verbindung? Java Basics - Anfänger-Themen 5
B Verbindung zur Datenbank (SQL.) Java Basics - Anfänger-Themen 13
R Java, Bluetooth: mit PC eine SPP Verbindung aufbauen Java Basics - Anfänger-Themen 1
G Link Verbindung Java Basics - Anfänger-Themen 2
G Verbindung zu einer Oracle DB aufbauen Java Basics - Anfänger-Themen 2
K Verbindung zu MySQL Java Basics - Anfänger-Themen 4
G Verbindung herstellen Java Basics - Anfänger-Themen 3
M Telnet Verbindung aufbauen Java Basics - Anfänger-Themen 2
M SQL Verbindung Java Basics - Anfänger-Themen 9
B Client - Server Verbindung über sockets mysql DB ansprechen? Java Basics - Anfänger-Themen 6
C Collection in Verbindung mit String.split speicherlastig Java Basics - Anfänger-Themen 20
G SSL Verbindung testen? Java Basics - Anfänger-Themen 1
J Problem mit forschleifen in Verbindung mit Kondtional operat Java Basics - Anfänger-Themen 2
M JSP --> Verbindung zur MySQL Datenbank geht nicht ! HILFF Java Basics - Anfänger-Themen 7
X 1 MySQL-Verbindung und viele Threads Java Basics - Anfänger-Themen 4
S Server/Client Verbindung Java Basics - Anfänger-Themen 2
R JDBC Verbindung geht nicht Java Basics - Anfänger-Themen 4
S MySQL-Verbindung Java Basics - Anfänger-Themen 4
G addKeyListener in verbindung mit JFrame !? Java Basics - Anfänger-Themen 2
D java in verbindung mit svg und html Java Basics - Anfänger-Themen 3
J Verbindung zu dbf Dateien Java Basics - Anfänger-Themen 6
D Verbindung von Methoden und Felder Java Basics - Anfänger-Themen 3
C string über server/client verbindung senden ? Java Basics - Anfänger-Themen 4
N SSH-Verbindung zu entferntem Rechner aufbauen Java Basics - Anfänger-Themen 5
G Programmstart mit JAR File - keine DB-Verbindung Java Basics - Anfänger-Themen 2
megachucky GUI-Problem in Verbindung mit while-Schleife und Listener Java Basics - Anfänger-Themen 4
Torschti Eingabe von Dezimalzahlen (bis zu zwei Kommastellen) Java Basics - Anfänger-Themen 11
A 1 Leerzeichen durch zwei Leerzeichen ersetzen Java Basics - Anfänger-Themen 4
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
sasnitzer java augensumme von zwei würfeln ist 1 Java Basics - Anfänger-Themen 8
krgewb Double mit zwei Nachkommastellen Java Basics - Anfänger-Themen 2
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
D Größtes Palindrom Produkt aus zwei dreistelligen Zahlen Java Basics - Anfänger-Themen 60
berserkerdq2 Habe zwei exceptions, welche ist ein Kommunikationsfehler und welche ein Ausgabefehler? Java Basics - Anfänger-Themen 4
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
B Erste Schritte Bisektion mit zwei Funktionen? Java Basics - Anfänger-Themen 1
G zwei Instanzen einer Klasse Java Basics - Anfänger-Themen 29
A Java-XSSFBook: zwei Sheets mergen Java Basics - Anfänger-Themen 5
C Zwei Arrays addieren und ausgeben Java Basics - Anfänger-Themen 3
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
berserkerdq2 Wie würde man einen regulären Ausdruck in Java schreiben, der prüft, dass zwei bestimtme Zahlen nicht nebeneinadner sind? Java Basics - Anfänger-Themen 3
K mit <<1 kann man mal 2 machen, mit >>2 geteilt durch zwei und was bewirkt <<<1 und >>>1? Java Basics - Anfänger-Themen 5
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
M Wie kann ich ein Array in zwei Hälften aufteilen? Java Basics - Anfänger-Themen 12
S Längster Pfad zwischen zwei Vertices in einem Graph Java Basics - Anfänger-Themen 3
S Aktuell beste Methode um zwei Bilder zu vergleichen..? Java Basics - Anfänger-Themen 1
A Zwei XML-Dateien Mergen Java Basics - Anfänger-Themen 14
U Erste Schritte nextGaussian zwischen zwei Werten Java Basics - Anfänger-Themen 19

Ähnliche Java Themen

Neue Themen


Oben