Java FX GUI Anwendung

Diskutiere Java FX GUI Anwendung im Java Basics - Anfänger-Themen Bereich.
I

iris_anfänger

Du hast ja eine Klasse Figur. Nun sollst Du die Klasse Figur "umwandeln" in eine Klasse Shape. Kennst Du die Klasse Shape denn schon? Hast Du Dir die einmal angesehen?

Als Hinweis vielleicht einmal: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/shape/Shape.html
Die Klasse Shape kenne ich, aber nich auswendig.
Jetzt sieht meine Drawing klass so aus:
Java:
import java.util.ArrayList;

public class Drawing {
    
 public static ArrayList<Figur> getDefaultFigur() {
     ArrayList<Figur> shapes = new ArrayList<>();
     shapes.add(Figur.getDefaultFigur());
     shapes.add(Figur.getDefaultFigur());
     return shapes;
 }
}
und die Klasse Figur:
Java:
package model;

import javafx.scene.paint.Color;

public abstract class Figur {
    //Attribute
    protected int nummer;
    private static int zaehler = 0;
    protected double xKoord;
    protected double yKoord;
    public int lenght = 5;

    // Konstruktor
    public Figur(double pXKoord, double pYKoord) {
    xKoord = pXKoord;
    yKoord = pYKoord;
    zaehler++;
    nummer = zaehler;
    }
    
    public int ausgebenNummer() {
    return nummer;
    }
    
    // Ausgabe
    public String toString() {
    return "Return über toString-Methode: \n" + getForm() + "; Flaecheninhalt: " + getFlaeche() + "; Umfang: " + getUmfang() + "\n" + "Koordinaten:" + xKoord + "," + yKoord;
    }
    
    //get-Methode
    public double getKoordX() {
    return xKoord;
    }
    
    public double getKoordY() {
    return yKoord;
    }
    
    
    // Abstrakte Methoden
    public abstract boolean enthaelt(Punkt pPunkt);
    public abstract double getFlaeche();
    public abstract double getUmfang();
    public abstract String getForm();
    
    public static Figur getDefaultFigur(){
    Rechteck rec1= new Rechteck(4.0, 4.0, 20, 10);
        rec1.setStrocke(Color.BLUE);
        return rec1;
    }
 }
Aber meine Methode getDefaultFigur() in der Klasse Figur.... Ist so was erlaubt???
Oder wie kann ich das machen?
 
J

JustNobody

Kannst Du mir bitte einmal mitteilen, was Du genau versuchst? Im Augenblick verstehe ich nicht, was Du mit der "getDefaultFigur" erreichen willst oder wozu die da sein soll.

Ich hatte das so verstanden, dass es um den Punkt 3c geht:
c) Methoden zur Umwandlung einer Figur in eine Instanz der Klasse Shape und umgekehrt;

Also wenn Du eine Instanz von Rechteck hast -> Wie kannst Du daraus eine Instanz von Shape (oder abgeleitet) erzeugen?
Und wenn Du eine Klasse hast, die von Shape abgeleitet ist -> Wie könntest Du da zu einer Instanz von Figur (oder abgeleitet) kommen?

Das Problem in #18, auf das dann in #19 hingewiesen wurde ist doch: In der Java GUI können Deine Klassen nicht dargestellt werden. JavaFX weiss nicht, wie "Rechteck" oder so zu zeichen ist. Aber es gibt die Klasse Shape (und davon abgeleitete Klassen) und wenn Du aus einer Rechteck Instanz eine Shape Instanz machen kannst, dann kannst Du diese Shape Instanz in JavaFX darstellen.

Also ist nun die Frage: Wie kriegst Du z.B. auch Deiner Rechteck Instanz eine Instanz von Shape?
 
I

iris_anfänger

Kannst Du mir bitte einmal mitteilen, was Du genau versuchst? Im Augenblick verstehe ich nicht, was Du mit der "getDefaultFigur" erreichen willst oder wozu die da sein soll.

Ich hatte das so verstanden, dass es um den Punkt 3c geht:
c) Methoden zur Umwandlung einer Figur in eine Instanz der Klasse Shape und umgekehrt;

Also wenn Du eine Instanz von Rechteck hast -> Wie kannst Du daraus eine Instanz von Shape (oder abgeleitet) erzeugen?
Und wenn Du eine Klasse hast, die von Shape abgeleitet ist -> Wie könntest Du da zu einer Instanz von Figur (oder abgeleitet) kommen?

Das Problem in #18, auf das dann in #19 hingewiesen wurde ist doch: In der Java GUI können Deine Klassen nicht dargestellt werden. JavaFX weiss nicht, wie "Rechteck" oder so zu zeichen ist. Aber es gibt die Klasse Shape (und davon abgeleitete Klassen) und wenn Du aus einer Rechteck Instanz eine Shape Instanz machen kannst, dann kannst Du diese Shape Instanz in JavaFX darstellen.

Also ist nun die Frage: Wie kriegst Du z.B. auch Deiner Rechteck Instanz eine Instanz von Shape?
Java:
public class Test extends Application {
    .......
    Rectangle n = new Rectangle(0, 0, 800, 460);
    root.getChildren().add(n);
}
 
J

JustNobody

Ich weiß jetzt gerade nicht wirklich weiter. Vielleicht ein kleines Beispiel das man aus dem echten Leben konstruiert:

Du hast Dinge in Kartons (=> Figur). Egal was da drin ist. Du hast halt diverse Kartons, z.B. Schuhkartons (=> Rechteck). Und nun willst Du dem Deinem Vater zur Aufbewahrung geben. Dein Vater will die Teile aber ordentlich stapeln, daher will er von Deinen blöden Kartons nicht wissen! Die sind nicht stabil genug, halten ggf. Feuchtigkeit nicht ab, haben keine Einheitlichen Maße und und und ... Daher nimmt Dein Vater nur "StapelbarePlastikBox" (==> Shape) entgegen. Die als solche gibt es nicht, aber da hat Dein Vater ganz viele tolle Dinge, z.B. StapelbarePlastikBox50x25x25 (==> javafx.scene.shape.Rectangle).

Also da Dein Vater Deine Kartons nicht mag und Du aber total auf die Kartons abfährst, brauchst Du nun eine Methode, um
a) den Inhalt aus Deinem Schuhkarton in eine entsprechend ausgesuchte StapelbarePlastikBox zu packen (==> Dann kannst Du es Deinem Vater zum einlagern geben)
b) den Inhalt aus der StapelbarePlastikBox wieder in einen Karton zu packen. (==> Dann bist Du glücklich, denn Du kannst nur glücklich sein, wenn Du es in Kartons hast!

Also: Hör auf Deinem Vater Kartons geben zu wollen! Wenn Du das weiter machst, dann musst Du in Deinem Zimmer bleiben und bekommst eine Woche lang keinen Nachtisch! (==> Compiler-Fehler das dein Code einfach nicht übersetzbar ist!)
 
J

JustNobody

Ich kann etwas vorgeben, wie man einen Teil machen könnte. Deine Klasse Figur kann eine abstrakte Methode public Shape asShape() bekommen. Diese kannst Du dann in allen Klassen überschreiben.

In Rechteck erzeugst Du eine Instanz von Rectangle und setzt dann die Werte von Rectangle, ehe Du Rectangle zurück gibst:

Java:
Rectangle r = new Rectangle();
r.setX(x);
r.setY(y);
r.setWidth(width);
r.setHeight(height);
return r;
Wobei ich Deine Klasse Rechteck nicht kenne, also die Instanzvariablen für x/y und breite/hoehe heißen evtl. anders.

Und Rechteck bekommt eine static Methode a.la.

Java:
public static Rechteck fromRectangle(Rectangle rectangle) {
    Rechteck result = new Rechteck();
    result.setX(rectangle.getX());
    result.setY(rectangle.getY());
    result.setWidth(rectangle.getWidth());
    result.setHeight(rectangle.getHeight());
    return result;
}
Und schon hast Du eine Möglichkeit, aus dem javafx Rectangle ein von Dir geschriebenes Rechteck zu machen.

Und da Shape von Node erbt und Rectangle von Shape, kannst Du so ein Rectangle zu den "children" hinzufügen, also sowas root.getChildren().add(rechteck.asShape());
 
I

iris_anfänger

Ich kann etwas vorgeben, wie man einen Teil machen könnte. Deine Klasse Figur kann eine abstrakte Methode public Shape asShape() bekommen. Diese kannst Du dann in allen Klassen überschreiben.

In Rechteck erzeugst Du eine Instanz von Rectangle und setzt dann die Werte von Rectangle, ehe Du Rectangle zurück gibst:

Java:
Rectangle r = new Rectangle();
r.setX(x);
r.setY(y);
r.setWidth(width);
r.setHeight(height);
return r;
Wobei ich Deine Klasse Rechteck nicht kenne, also die Instanzvariablen für x/y und breite/hoehe heißen evtl. anders.

Und Rechteck bekommt eine static Methode a.la.

Java:
public static Rechteck fromRectangle(Rectangle rectangle) {
    Rechteck result = new Rechteck();
    result.setX(rectangle.getX());
    result.setY(rectangle.getY());
    result.setWidth(rectangle.getWidth());
    result.setHeight(rectangle.getHeight());
    return result;
}
Und schon hast Du eine Möglichkeit, aus dem javafx Rectangle ein von Dir geschriebenes Rechteck zu machen.

Und da Shape von Node erbt und Rectangle von Shape, kannst Du so ein Rectangle zu den "children" hinzufügen, also sowas root.getChildren().add(rechteck.asShape());
Danke!!!!!:)
Sollten Klassen Rechteck, Kreis auch Methoden setX(), setY(), setWidth() und setHeight() besitzen?
 
I

iris_anfänger

Java:
package model;

import javafx.scene.shape.Rectangle;
import javafx.scene.shape.Shape;

public class Rechteck extends Figur{
    private double breite;
    private double hoehe;
    
    public Rechteck(double pXKoord, double pYKoord, double pBreite, double pHoehe) { //Konstruktor der Oberklasse aufrufen
    super(pXKoord, pYKoord);
    breite = pBreite;
    hoehe = pHoehe;
    }

    @Override
    public boolean enthaelt(Punkt pPunkt) {
    return pPunkt.getKoordX() >= xKoord && pPunkt.getKoordX() <= breite + xKoord &&
           pPunkt.getKoordY() <= yKoord && pPunkt.getKoordY() <= hoehe + yKoord;
    }

    @Override
    public double getFlaeche() {
    double fl = breite * hoehe;
    return fl;
    }

    @Override
    public double getUmfang() {
    double um = breite + hoehe + breite + hoehe;
    return um;
    }

    @Override
    public String getForm() {
    String form = "wat";
        return form;
    }

    @Override
    public Shape asShape() {
    Rectangle r = new Rectangle();
    r.setX(xKoord);
    r.setY(yKoord);
    r.setWidth(breite);
    r.setHeight(hoehe);
    return r;
    }
    


    public static Rechteck fromRectangle(Rectangle rectangle) {
    Rechteck result = new Rechteck();
    result.setX(rectangle.getX());
    result.setY(rectangle.getY());
    result.setWidth(rectangle.getWidth());
    result.setHeight(rectangle.getHeight());
    return result;
}

}
 
Thema: 

Java FX GUI Anwendung

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben