Java FX GUI Anwendung

Hallo zusammen,

ich brauche wieder eure Unterstützung. Es soll eine FX Anwendung gestaltet werden, die Figuren aus anderen Klassen anzeigen lässt.
Klasse Drawing als eine Zusammenstellung von Objekten der Klassen Dreieck, Kreis, die in eine Liste namens Shapes zusammengefasst sind / Abstrakte Klasse Figuren --> Klassen Dreieck und Kreis

Wie kann ich Figuren zur Liste hinzugügen und von der Liste entfernen (Klasse Drawing)

FX-Anwendung – Wie können in der GUI Anwendung Objekte aus Klasse Drawing angezeigt werden (vererbung?:oops:)

Über jede Hilfe würde ich mich sehr freuen!!! Gerne auch in Form einer Nachhilfe.

Vielen Dank
 
Viele Wege führen nach Rom und Deine Beschreibung lässt da viel Spielraum... Du solltest etwas konkreter werden, was die Aufgabenstellung betrifft.

Beantworten lässt sich aber:

Mit den Methoden add und remove der Klasse List.
Code:
public class Drawing {
      
    private static Figur Figur = null;

    public static void main(String[]args) {
        Figur d, k, c;
    
        d = new Dreieck(new Punkt(2.0, 1.0), new Punkt(6.0, 3.0), new Punkt(4.0, 7.0));
        k = new Kreis(new Punkt(0.0, 0.0), 3);
        c = new Kreis(new Punkt(1.0, 1.0), 2);
          
            // Vereinbaren einer neuen Variable list vom Typ ArrayList<Figur>
            // Nach dem Konstruktoraufruf hat die ArrayList Platz fuer 10 Elemente.
            // Ist die Kapazitaet erschoepft wird sie automatisch erweitert.
            ArrayList<Figur> shapes = new ArrayList<>();
            

            // Methode zum Fuellen der ArrayList aufrufen
            fuelleArrayList(shapes);

            // Methode zum Ausgeben der ArrayList aufrufen
            ausgebenArrayList(shapes);
        }

        /**
         * ethode zum Befuellen der ArrayList mit Figur Objekten.
         *
         * @param list
         *            ArrayList die gefuellt werden soll
         *
         */
        private static void fuelleArrayList(ArrayList<Figur> shapes) {
            for (int i = 0; i < shapes.size(); i++) {
                // Element zu der Liste hinzufuegen
                shapes.add(Figur);
            }
        }

        /**
         * Methode zum Ausgeben des Inhalts der ArrayList auf der Konsole.
         *
         * @param list
         *            ArrayList die ausgegeben werden soll
         */
        private static void ausgebenArrayList(ArrayList<Figur> shapes) {
            // Gesamtanzahl der Elemente ausgeben
            System.out.println("In der ArrayList sind " + shapes.size() + " Objekte.");

            // Schleife ueber alle Elemente der ArrayList
            for (Figur inhalt : shapes) {
                System.out.println(inhalt);
            }
        }
}
Was habe ich falsch gemacht?
In der ArrayList sind 0 Objekte.
 
Ziemlich viel.

shapes ist eine leere ArrayList, die übergibst du an die Methode fuelle(). Darin ist eine Schleife die bis zu shapes.size() geht. Und wie groß ist nun shapes?
Erst einmal dürfte es gar nicht übersetzen. Somit wird noch nicht einmal eine ArrayListe erzeugt und so ...

shapes.add(Figur);
macht so keinen Sinn. shapes will eine Figur übergeben bekommen...

Und bei dem Code macht vieles keinen Sinn, so dass ich da erst einmal um eine Erläuterung bitten würde, was wo geschehen soll!
 
Klasse Drawing als eine Zusammenstellung von Objekten der Klassen Dreieck, Kreis, die in eine Liste namens Shapes zusammengefasst sind / Abstrakte Klasse Figuren --> Klassen Dreieck und Kreis

Wie kann ich Figuren zur Liste hinzugügen und von der Liste entfernen (Klasse Drawing)
Um mal ein paar Dinge für die Lösung zu nennen:
  • du hast eine Klasse Drawing
  • diese benötigt ein Attribut (Instanzvariable) shapes (die Liste)
  • außerdem die Methoden add(Figur) und remove(Figur)
  • "static" ist an keiner Stelle notwendig und gewünscht
Verwendet wird das dann etwa so:
Java:
Drawings drawings = new Drawings();

Dreieck dreieck = new Dreieck(); // Parameter weggelassen...

drawings.add(dreieck);
drawings.add(new Kreis());

drawings.remove(dreieck);
Edit: Noch ein Anmerkung zu static:

Für erste Versuche und Übungen bei denen man nur eine Klasse mit der Methode main() hat, ist es noch in Ordnung "static" zu verwenden, um z.B. auch mit Methoden arbeiten zu können.

Spätestens sobald weitere (selbst erstellte) Klassen ins Spiel kommen muss damit Schluss sein. Static wird für bestimmte Ausnahmen benötigt, aber auch nur dafür.
 
Zuletzt bearbeitet:
vielen Dank für eure Unterstützung!!!
Aber bin ich immer noch nicht ganz sicher , ob mein Lösungsweg richtig ist.
Ich habe Klasse Punkt:
Java:
public class Punkt {
    private double x;
    private double y;
    
    public Punkt (double x, double y) {
    this.x = x;
    this.y = y;
    }
    
    public void setX(double x) {
    this.x = x;
    }
    
    public void setY(double y) {
    this.y = y;
    }
    
    public double getX() {
    return x;
    }
    
    public double getY() {
    return y;
    }

}
Dann abstrakte Klasse Figur:
Java:
abstract class Figur {
    protected int nummer;
    private static int zaehler = 0;
  
    Figur() {
    zaehler++;
    nummer = zaehler;
    }
    
    public int ausgebenNummer() {
    return nummer;
    }

    public String toString() {
    return "Return über toString-Methode: \n" + getForm() + "; Flaecheninhalt: " + getFlaeche() + "; Umfang: " + getUmfang() + "\n";
    }
    
    public abstract double getFlaeche();
    public abstract double getUmfang();
    public abstract String getForm();
}
Dann zwei Klassen Kreis und Dreieck:

Java:
public class Kreis extends Figur{
    Punkt m;
    double r;
    
    public Kreis(Punkt m, double r) {
    this.m = m;
    this.r = r;
    }

    @Override
    public double getFlaeche() {
    double fl = Math.PI * r * r;
    return fl;
    }

    @Override
    public double getUmfang() {
    double umfang = 2 * Math.PI * r;
    return umfang;
    }

    @Override
    public String getForm() {
    String form = "Kreis";
        return form;
    }
}
Dann Klasse Drawing:
Java:
import java.util.ArrayList;

public class Drawing {
      
    public static void main(String[]args) {
    ArrayList<Figur> shapes = new ArrayList<Figur>();
    
    Punkt x1 = new Punkt (0.0, 0.0);
    Punkt x2 = new Punkt (1.1, 1.0);
    
// Figur hinzufügen, Aber keine Methode
    shapes.add(new Kreis(x1, 3));
    shapes.add(new Kreis(x2, 4));
    shapes.remove(new Kreis(x2, 4));
    
        for (Figur inhalt : shapes) {
            System.out.println(inhalt);
            }
    }
}
Hier ist immer noch für mich fast ALLES kaum verständich. Sorry, aber bin ich Anfänger und mache echer intuitiv .....o_O .
Mit fehlen immer noch Methoden :
um Figuren zur Liste hinzugügen oder von der Liste entfernen,
zur Umwandlung einer Figure in eine Instanz der Klasse Drawing und umgekehrt;
Methode zur Abfrage, ob ein Punk innerhalb Figure liegt;
Methode, um den Index einer Figur oder die Figur zu einem Index abzufragen

Über scene rede ich erst gar nichts..
 
Hier ist immer noch für mich fast ALLES kaum verständich. Sorry, aber bin ich Anfänger und mache echer intuitiv .....o_O .
Eigentlich ist das alles recht intuitiv, allerdings musst Du Dich wirklich um ein paar Grundlagen kümmern.

Klasse Drawing als eine Zusammenstellung von Objekten der Klassen Dreieck, Kreis, die in eine Liste namens Shapes zusammengefasst sind
Dann mach das doch einfach (Skizze):
Java:
public class Drawing {
    private List<Figur> shapes = new ArrayList<>();

    public void hinzufuegen(Figur figur) {
        shapes.add(figur);
    }

    public void entfernen(Figur figur) {
        shapes.remove(figur);
    }
}
Jetzt kannst Du irgendwo in Deinem Code eine neue Zeichnung erstellen und Figuren hinzufügen:
Java:
    Punkt x1 = new Punkt (0.0, 0.0);
    Punkt x2 = new Punkt (1.1, 1.0);
    Drawing zeichnung = new Drawing();
    zeichnung.hinzufuegen(new Kreis(x1, 3));
    zeichnung.hinzufuegen(new Kreis(x2, 4));
 
Die bisherige Code habe ich selbst geschrieben und verstehe da alles. Für mich den Lösungsweg selbst nicht ganz verständlich.
app.jpg

In der Aufgabe steht:
1) Abstrakte Klasse Figur fasst die Gemeinsamkeit der Klassen Kreis, Dreieck.
2) Die Klasse Drawing kann als eine Zusammenstellung von Objekten interpretiert werden, die von der abstrakte Klasse Figur abgeleitet sind. Folglich werden die Referenzen der in der Zeichnung enthaltene Figuren in einer Liste namens shapes verwaltet. Die Klasse Drawing muss über eine Reihe von Methoden verfügen, die es ermöglichen:
a) die Referenz einer weiteren Figur zur Zeichnung hinzufügen;
b) ausgewählte Figuren aus der Zeichnung löschen;
c) die Parameter, den Flächeninhalt und den Umfang aller Figuren der Zeichnung ausgeben.

3) Erweitern Sie die Klasse Figur und sowie konkreten Figuren-Klassen um Variablen und Methoden (falls notwendig), wie z.B.
a) erweiterte Konstruktoren,
b) Zugriffsfunktionen,
c) Methoden zur Umwandlung einer Figur in eine Instanz der Klasse Shape und umgekehrt;
d) eine Methode zur Abfrage, ob ein Punk innerhalb einer Figur liegt

4) Implementieren Sie die Klasse Drawing, die eine Zeichnung als Zusammenstellung von Figuren der abstrakte Klasse Figur enthält.
a) fassen Sie die Instanzen dieser Objekte in einer Liste namens shapes zusammen.
b) implementieren für die Klasse Drawing Methoden, die es ermöglichen Figuren zur Lste hinzufügen oder von der Liste entfernen; den Index einer Figu oder die Figur zu einem Index abzufragen

5) Prüfen Sie, ob alle Attribute dieser implementierten Klassen von Zugriffen von aussen geschützt, jedoch alle Methoden verwendbar sind. Achten Sie dabei auf die Regelung der Zugriffskontrole bei der Verebung. Schreiben Sie für alle geschützten Attribute Zugriffsfunktionen, die es erlauben, die Attribute zu verändern oder zu lesen.

6) Entwickeln eine GUI Anwendung App, die als Attribut eine Instanz der Klasse Drawing verwaltet.
a) Oben als Zeichnung, Unten Textfelder zur Auswahl des Indizes einer Figur und zur Ein-Ausgabe der dazugehörigen Attribute sowie Typs, Umfang, Fläche
b) Veränderungen in den Textfeldern werden erst nach Bestätigung OK—Button in die Zeichnung übernommen.
c) binden Sie die Mouse in die GUI Anwendung ein. Modifizieren Sie dazu App so, dass die Auswahl der angezeigten Figur über Mouse erfolgen und eine neue Figur (z.B. Rechteck) mit der Mouse aufgezogen werden kann.
Zum Schluss sollte es so aussehen:
appfront.jpg
 
Danke für Geduld:)
Sie ist jedenfalls sinnvoll.

Hast Du diese eingeführt oder war die Teil eines gegebenen UML-Diagramms?
Punk habe ich selber ausgedacht, weil in der Anwendung sollten Koordinaten angezeigt werden und ich habe gedacht, dass die Klasse Punk in dem Fall sinnvoll ist. Jetzt habe ich diese gelöscht und weitere Klassen ümgeschrieben. Es ist nur noch Anwendung selbst geblieben. soll weiter kämpfen....
Es irretiert mich immer noch Punk 3c, ich verstehe nicht, was ist hier gemeint
 
Es irretiert mich immer noch Punk 3c, ich verstehe nicht, was ist hier gemeint
Ich nehme an, bei Shape handelt es sich um die JavaFx-Klasse Shape. Ist aber nur eine Vermutung, weil es sich um eine JavaFx-Anwendung handelt.

Punk habe ich selber ausgedacht, weil in der Anwendung sollten Koordinaten angezeigt werden und ich habe gedacht, dass die Klasse Punk in dem Fall sinnvoll ist.
Mit deinen Gedanken liegst du ganz richtig. Sinnvoll ist es auf jeden Fall. In diesem Sinne: Punks not dead!

Edit: Für einige der in der Aufgabe verlangten Funktionen schau dir auch die Doku zur Java List an. Die hat viele Methoden, die du gebrauchen kannst.
 
Zuletzt bearbeitet:
Hallo noch mal.

Wie kann ich direkt in der FX-Anwendung Objekte aus anderen Klassen erzeugen und Methode aus anderen Klassen aufrufen, wenn da in der main Methode eigentlich nur launch(args) ist? Ich habe schon so viel Informationen gelesen, aber immer noch auf dem gleichem Punkt…..
 
Wie kann ich direkt in der FX-Anwendung Objekte aus anderen Klassen erzeugen und Methode aus anderen Klassen aufrufen
Wie in allen anderen Anwendungen auch: mit new werden Objekte erzeugt. Deren Referenzen werden in Variablen gespeichert und über diese lassen sich die Methoden aufrufen.
Java:
SomeClass someObject = new SomeClass( /* Parameterliste */ );
someObject.someMethod( /* Parameterliste */ );
 
Wie in allen anderen Anwendungen auch: mit new werden Objekte erzeugt. Deren Referenzen werden in Variablen gespeichert und über diese lassen sich die Methoden aufrufen.
Java:
SomeClass someObject = new SomeClass( /* Parameterliste */ );
someObject.someMethod( /* Parameterliste */ );
So habe ich auch versucht, aber funktioniert nicht.....
Java:
BorderPane borderPane = new BorderPane();
Scene scene = new Scene(borderPane,1000,400);
Drawing zeichnung = new Drawing();
zeichnung.hinzufuegen(new Rechteck(1, 1, 5, 4));
borderPane.getChildren().add(zeichnung);
 
Ja, das ist auch völlig logisch: Drawing ist ja keine JavaFX-Klasse (oder von einer solchen abgeleitet). Aus dem Grund gibt es die Aufgabe 3 c)
 
Ja, das ist auch völlig logisch: Drawing ist ja keine JavaFX-Klasse (oder von einer solchen abgeleitet). Aus dem Grund gibt es die Aufgabe 3 c)
und genau das, konnte ich leider nicht....
Java:
public class Drawing {
    
    List<Figur> shapes = new ArrayList<Figur>();
    
    public void hinzufuegen(Figur x) {
    for (int i = 0; i< x.lenght; i++) {
        if(x instanceof Kreis ) {
            Kreis kreis = (Kreis) x;
            shapes.add(x);
        } else {
            Rechteck rechteck = (Rechteck) x;
            shapes.add(x);
        }
    }
Kann mir jemand helfen? Was mache ich falsch???
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben