Verbindung von Anwendung mit GUI

looser88

Mitglied
Hallo,
ich habe ein Problem 
Ich habe ein Programm,welches die Stabilität von Türmen berechnet und eine grafische Oberfläche welche ein Raster anzeigt …..
Nun möchte ich das die grafische Oberfläche nur stabile Bautürme abbildet(bündig angeordnet links unten )
Ich weiß leider nicht wie ich meiner Anwendung sage :,,Teste die Bausteintürme und gebe mir die stabilen Türme wieder und zeichne sie im Raster “

Stabilitätprogramm
Java:
 package anwendung;

import modell.BausteinBox;
import modell.BausteinTurm;
import schnittstellen.IBaustein2D;
import schnittstellen.IBausteinTurm;
import util.Punkt2D;
import ausnahmen.Listenfehler;
import ausnahmen.TurmInstabilException;

/**
 * Anwendungsfall 1: Bausteinturm bestehend aus Bausteinen der Größe 2,3,5,4,1
 * und 3 werden nacheinander versucht auf den Turm zu legen
 */
public class Anwendungsfall1 {

  /**
   * Einsprungpunkt für Programm
   * 
   * @param args
   */
  public static void main(String[] args) {

    IBausteinTurm turm = new BausteinTurm();

    try {
      IBaustein2D b1 = BausteinBox.erzeugeBaustein(new Punkt2D(0.0, 0.0), 2);
      turm.legeBausteinAb(b1);

      IBaustein2D b2 = BausteinBox.erzeugeBaustein(new Punkt2D(0.0, 1.0), 3);
      turm.legeBausteinAb(b2);

      IBaustein2D b3 = BausteinBox.erzeugeBaustein(new Punkt2D(0.0, 2.0), 5);
      turm.legeBausteinAb(b3);

      IBaustein2D b4 = BausteinBox.erzeugeBaustein(new Punkt2D(0.0, 3.0), 4);
      turm.legeBausteinAb(b4);

      IBaustein2D b5 = BausteinBox.erzeugeBaustein(new Punkt2D(0.0, 4.0), 1);
      turm.legeBausteinAb(b5);

      IBaustein2D b6 = BausteinBox.erzeugeBaustein(new Punkt2D(0.0, 5.0), 3);
      turm.legeBausteinAb(b6);
    } catch (Listenfehler e) {
      System.out.println(e.getMessage());
    } catch (TurmInstabilException e) {
      System.out.println(e.getMessage());
    }
    turm.ausgebenAufShell();
  }
}

Java:
 package anwendung;

import modell.BausteinBox;
import modell.BausteinTurm;
import schnittstellen.IBaustein2D;
import schnittstellen.IBausteinTurm;
import util.Punkt2D;
import ausnahmen.Listenfehler;
import ausnahmen.TurmInstabilException;

/**
 * Anwendungsfall 1: Bausteinturm bestehend aus Bausteinen der Größe 5,4,3,4,5
 * und 5 werden nacheinander versucht auf den Turm zu legen
 */
public class Anwendungsfall2 {

  /**
   * Einsprungpunkt für Programm
   * 
   * @param args
   */
  public static void main(String[] args) {
    IBausteinTurm turm = new BausteinTurm();

    try {
      IBaustein2D b1 = BausteinBox.erzeugeBaustein(new Punkt2D(0.0, 0.0), 5);
      turm.legeBausteinAb(b1);

      IBaustein2D b2 = BausteinBox.erzeugeBaustein(new Punkt2D(0.0, 0.0), 4);
      turm.legeBausteinAb(b2);

      IBaustein2D b3 = BausteinBox.erzeugeBaustein(new Punkt2D(0.0, 0.0), 3);
      turm.legeBausteinAb(b3);

      IBaustein2D b4 = BausteinBox.erzeugeBaustein(new Punkt2D(0.0, 0.0), 4);
      turm.legeBausteinAb(b4);

      IBaustein2D b5 = BausteinBox.erzeugeBaustein(new Punkt2D(0.0, 0.0), 5);
      turm.legeBausteinAb(b5);

      IBaustein2D b6 = BausteinBox.erzeugeBaustein(new Punkt2D(0.0, 0.0), 5);
      turm.legeBausteinAb(b6);
    } catch (Listenfehler e) {
      System.out.println(e.getMessage());
    } catch (TurmInstabilException e) {
      System.out.println(e.getMessage());
    }
    turm.ausgebenAufShell();
  }
}

Java:
 package ausnahmen;

@SuppressWarnings("serial")
/**
 * Ausnahme die beim Fehler innerhalb der Einfach verketteten Liste ausgelöst wird
 *
 */
public class Listenfehler extends Exception {

  /**
   * Konstruktor für die Ausnahme übergibt Parameter an Vaterklasse weiter
   * 
   * @param message
   */
  public Listenfehler(String message) {
    super(message);
  }
}

Java:
 package ausnahmen;

@SuppressWarnings("serial")
/**
 * Ausnahme die bei Turminstabilität ausgelöst wird
 *
 */
public class TurmInstabilException extends Exception {

  /**
   * Konstruktor für die Ausnahme übergibt Parameter an Vaterklasse weiter
   * 
   * @param message
   */
  public TurmInstabilException(String message) {
    super(message);
  }

}
Java:
 package modell;

import schnittstellen.IBaustein2D;
import schnittstellen.IPunkt2D;
import util.Punkt2D;

/**
 * Ein Baustein mit beliebiger Länge, Höhe gleich 1 und Tiefe gleich 1;
 */
public class Baustein2D implements IBaustein2D {

  //rechte obere und linke untere Ecke des Bausteins als Punkte
  private IPunkt2D rechteObereEcke;
  private IPunkt2D linkeUntereEcke;

  /**
   * Konstruktor für einen Baustein mithilfe zweier Eckkoordinaten
   * 
   * @param linkeUntereEcke: Punktkoordinate der linken unteren Ecke
   * @param rechteObereEcke: Punktkoordinate der rechten oberen Ecke
   */
  public Baustein2D(IPunkt2D linkeUntereEcke, IPunkt2D rechteObereEcke) {
    this.linkeUntereEcke = linkeUntereEcke;
    this.rechteObereEcke = rechteObereEcke;
  }

  /**
   * holt die Länge des Bausteines
   */
  public double getLaenge() {
    return rechteObereEcke.getX() - linkeUntereEcke.getX();
  }

  /**
   * holt Schwerpunkt des Bausteines
   */
  public IPunkt2D getSchwerpunkt() {
    double xKoord = (rechteObereEcke.getX() - linkeUntereEcke.getX()) / 2.0;
    double yKoord = (rechteObereEcke.getY() - linkeUntereEcke.getY()) / 2.0;
    return new Punkt2D(xKoord, yKoord);
  }

  /**
   * holt rechten oberen Eckpunkt
   */
  public IPunkt2D getRechteObereEcke() {
    return rechteObereEcke;
  }

  /**
   * setzt rechten oberen Eckpunkt
   * 
   * @param rechteObereEcke
   */
  public void setRechteObereEcke(IPunkt2D rechteObereEcke) {
    this.rechteObereEcke = rechteObereEcke;
  }

  /**
   * holt linken unteren Eckpunkt
   */
  public IPunkt2D getLinkeUntereEcke() {
    return linkeUntereEcke;
  }

  /**
   * setzt linken unteren Eckpunkt
   * 
   * @param linkeUntereEcke
   */
  public void setLinkeUntereEcke(IPunkt2D linkeUntereEcke) {
    this.linkeUntereEcke = linkeUntereEcke;
  }

  /**
   * gibt die String-Repräsentation eines Bausteines zurück
   */
  public String toString() {
    String s = "Baustein Größe " + (int) getLaenge();
    return s;
  }
}

Java:
 package modell;

import schnittstellen.IBaustein2D;
import util.Punkt2D;

/**
 * Eine Bausteinbox mit dessen Hilfe Bausteine verschiedenen Länge erzeugt
 * werden können
 */
public class BausteinBox {

  /**
   * statische Methode zum Erzeugen von Baustein-Instanzen
   * 
   * @param linkeUntereEcke: Punktkoordinaten der linken unteren Ecke des
   *          Bausteines
   * @param bausteinGroesse: Bausteinlänge als Ganzzahl
   * @return
   */
  public static IBaustein2D erzeugeBaustein(Punkt2D linkeUntereEcke, int bausteinGroesse) {

    Punkt2D rechteObereEcke = new Punkt2D((double) bausteinGroesse, linkeUntereEcke.getY() + 1.0);
    IBaustein2D neuerBaustein = new Baustein2D(linkeUntereEcke, rechteObereEcke);
    return neuerBaustein;
  }
}


Java:
 package modell;

import schnittstellen.IBaustein2D;
import schnittstellen.IBausteinTurm;
import schnittstellen.IIterator;
import util.EinfachVerketteteListe;
import ausnahmen.Listenfehler;
import ausnahmen.TurmInstabilException;

/**
 * Ein Bausteinturm bestehend aus n Bausteinen, abgelegt in der Reihenfolge in
 * der sie auf den Turm gelegt wurden
 */
public class BausteinTurm implements IBausteinTurm {

  //Einfach verkettete Liste zum Speichern der Bausteine
  private EinfachVerketteteListe bausteine;

  /**
   * Leerkonstruktor für einen Bausteinturm. Initialisiert die Einfach
   * verkettete Liste
   */
  public BausteinTurm() {
    this.bausteine = new EinfachVerketteteListe();
  }

  /**
   * legt einen Baustein auf den vorhandenen Turm, wenn alle statischen
   * Anforderungen erfüllt sind. Bringt der Aufzulegende Stein den Turm zum
   * Einstürzen wird der Baustein nicht abgelegt.
   */
  public void legeBausteinAb(IBaustein2D abzulegenderStein) throws Listenfehler, TurmInstabilException {

    // bei leerer Liste wird erster Stein immer abgelegt
    if (bausteine.istLeer()) {
      bausteine.fuegeAmAnfangEin(abzulegenderStein);
      System.out.println("Erster Stein: " + abzulegenderStein.toString() + " abgelegt!");
    } else {

      //globaler Iterator für Bezugsstein
      IIterator itGlobal = bausteine.iterator();
      //Überprüfung der gesamten Turmstabilität
      while (itGlobal.hatNaechsten()) {

        //Bezugstein um den das Gesamtmoment geprüft wird
        IBaustein2D bezugsStein = (IBaustein2D) itGlobal.naechster();
        IBaustein2D aktStein = abzulegenderStein;
        double resMoment = 0.0;

        //lokaler Iterator für den zu überprüfenden Teilturm
        IIterator itLokal = bausteine.iterator();

        //Errechnung des Gesamtmomentes des Teilturmes
        while (aktStein != bezugsStein && itLokal.hatNaechsten()) {

          double diffSchwerpktZuBezugsPkt = aktStein.getSchwerpunkt().getX() - bezugsStein.getRechteObereEcke().getX();
          resMoment = resMoment + diffSchwerpktZuBezugsPkt * aktStein.getLaenge() * 1 * 1;
          aktStein = (IBaustein2D) itLokal.naechster();
        }

        // wenn das Moment um den Bezugspunkt >= 0 wird der Baustein NICHT abgelegt
        if (resMoment >= 0.0) {
          throw new TurmInstabilException(abzulegenderStein.toString() + " würde den Turm zum Einstürzen bringen!");
        }
      }
      bausteine.fuegeAmAnfangEin(abzulegenderStein);
      System.out.println(abzulegenderStein.toString() + " abgelegt!");
    }
  }

  /**
   * gibt die String-Repräsentation eines Bausteinturmes zurück
   */
  public String toString() {
    String s = "";
    IIterator iterator = bausteine.iterator();
    while (iterator.hatNaechsten()) {
      s = s + iterator.naechster().toString() + '\n';
    }
    s = s + "Bodenplatte";
    return s;
  }

  /**
   * Ausgabe der Bausteine eines Bausteinturmes auf der Shell
   */
  public void ausgebenAufShell() {
    System.out.println();
    System.out.println("Liegengebliebene Bausteine des Turms:");
    System.out.println(toString());
  }
}

Java:
 package schnittstellen;

/**
 * Schnittstelle für Baustein2D
 */
public interface IBaustein2D {

  double getLaenge();

  IPunkt2D getSchwerpunkt();

  IPunkt2D getRechteObereEcke();

  IPunkt2D getLinkeUntereEcke();

  String toString();

}
Java:
 package schnittstellen;

import ausnahmen.Listenfehler;
import ausnahmen.TurmInstabilException;

/**
 * Schnittstelle für Bausteinturm
 */
public interface IBausteinTurm {

  void legeBausteinAb(IBaustein2D b1) throws Listenfehler, TurmInstabilException;

  void ausgebenAufShell();
}



Java:
 package schnittstellen;

/**
 * Schnittstelle für Iterator
 */
public interface IIterator {

  boolean hatNaechsten();

  Object naechster();
}


Java:
 package schnittstellen;

/**
 * Schnittstelle für 2-dimensionalen Punkt
 */
public interface IPunkt2D {

  double getX();

  double getY();

  String toString();
}


Java:
 package util;

import schnittstellen.IIterator;
import ausnahmen.Listenfehler;

/**
 * Eine einfach verkettete liste
 */
public class EinfachVerketteteListe {

  // Referenz auf das erste Listenelement, wenn die Liste leer ist verweist es
  // auf null
  private EinfachVerkettetesListenElement erster;

  /**
   * Konstruktor erstellt eine leere Liste
   */
  public EinfachVerketteteListe() {
    setErster(null);
  }

  /**
   * gibt an, ob die Liste leer ist
   * 
   * @return true wenn Liste leer, false sonst
   */
  public boolean istLeer() {
    return erster == null;
  }

  public IIterator iterator() {
    return new ListenIterator(erster);
  }

  /**
   * fuegt ein Objekt am Anfang ein
   * 
   * @param o : einzufuegendes Objekt
   * @throws Listenfehler
   */
  public void fuegeAmAnfangEin(Object o) throws Listenfehler {
    // wenn kein Objekt uebergeben, wird Ausnahme geworfen
    if (o == null) {
      throw new Listenfehler("Fehlerhaftes oder kein Element übergeben!");
    }
    // erzeuge neues Listenelement
    EinfachVerkettetesListenElement neu = new EinfachVerkettetesListenElement();
    neu.setzeObjekt(o);
    neu.setzeNachfolger(erster);

    erster = neu;
  }

  /**
   * entfernt das Objekt am Anfang und gibt das entfernte Objekt zurück
   * 
   * @return : entferntes Objekt
   * @throws Listenfehler
   */
  public Object trageAmAnfangAus() throws Listenfehler {

    if (istLeer()) {
      throw new Listenfehler("Kein Element vorhanden!");
    }
    EinfachVerkettetesListenElement merke = erster;
    erster = erster.holeNachfolger();
    return merke;
  }

  /**
   * getter für erstes Listenelement in der Liste
   * 
   * @return
   */
  public EinfachVerkettetesListenElement getErster() {
    return erster;
  }

  /**
   * setter für erstes Listenelement in Liste
   * 
   * @param erster
   */
  public void setErster(EinfachVerkettetesListenElement erster) {
    this.erster = erster;
  }

  /**
   * Rückgabe der Liste als String
   */
  public String toString() {
    return "Listeninhalt: " + erster;
  }

}

Java:
 package util;

/**
 * Ein Listenelement fuer eine einfach verkettete Liste
 */
public class EinfachVerkettetesListenElement {

  private Object o;
  private EinfachVerkettetesListenElement nachfolger;

  /**
   * leerer Konstruktor fuer eine ListenElement
   */
  public EinfachVerkettetesListenElement() {
    setzeObjekt(null);
    setzeNachfolger(null);
  }

  /**
   * Konstruktor mit Übergabeparametern
   * 
   * @param o eigentlich zu speicherndes Objekt
   * @param nachfolger Nachfolgerelement in der Liste
   */
  public EinfachVerkettetesListenElement(Object o, EinfachVerkettetesListenElement nachfolger) {
    super();
    this.o = o;
    this.nachfolger = nachfolger;
  }

  /**
   * hole Objekt o
   * 
   * @return
   */
  public Object holeObjekt() {
    return o;
  }

  /**
   * setze Objekt o
   * 
   * @param Baustein
   */
  public void setzeObjekt(Object o) {
    this.o = o;
  }

  /**
   * hole den Nachfolger des Listenelementes
   * 
   * @return
   */
  public EinfachVerkettetesListenElement holeNachfolger() {
    return nachfolger;
  }

  /**
   * setze den Nachfolger des Listenelementes
   * 
   * @param nachfolger
   */
  public void setzeNachfolger(EinfachVerkettetesListenElement nachfolger) {
    this.nachfolger = nachfolger;
  }

  /**
   * Ruekgabe des Listeelementes als String
   */
  @Override
  public String toString() {
    return "EinfachVerkettetesListenElement [o=" + o + "]";
  }
}
Java:
 package util;

import schnittstellen.IIterator;

/**
 * Iterator für eine Einfach verkettete Liste. Implementiert die Schnittstelle
 * schnittstellen.IIterator
 */
public class ListenIterator implements IIterator {

  //Referenz auf das aktuelle Element, auf welches der Iterator verweist
  private EinfachVerkettetesListenElement aktueller;

  /**
   * Konstruktor für einen Listeniterator
   * 
   * @param aktueller Referenz auf die der Iterator beim Erzeugen verweist
   */
  public ListenIterator(EinfachVerkettetesListenElement aktueller) {
    this.aktueller = aktueller;
  }

  /**
   * prüft ob es ein nächstes Listenelement in der Liste gibt
   */
  public boolean hatNaechsten() {

    if (aktueller == null) {
      return false;
    }
    return true;
  }

  /**
   * gibt das aktuelle Listenelement zurück und setzt die Referenz für aktueller
   * auf den Nachfolger des zurückgegebenen Listenelementes
   */
  public Object naechster() {

    Object merke = this.aktueller.holeObjekt();
    this.aktueller = this.aktueller.holeNachfolger();
    return merke;
  }

}
Java:
 package util;

import schnittstellen.IPunkt2D;

/**
 * ein Punkt für ein 2-dimensionales Koordinatensystem mit x- und y-Koordinate
 */
public class Punkt2D implements IPunkt2D {

  //Koordinaten als Gleitkommazahlen
  private double xKoord;
  private double yKoord;

  /**
   * Konstruktor für einen Punkt2D mit Übergabe der beiden Koordinaten
   * 
   * @param xKoord
   * @param yKoord
   */
  public Punkt2D(double xKoord, double yKoord) {
    setX(xKoord);
    setY(yKoord);
  }

  /**
   * hole x-Koordinate
   */
  public double getX() {
    return this.xKoord;
  }

  /**
   * setze x-Koordinate
   * 
   * @param xKoord
   */
  public void setX(double xKoord) {
    this.xKoord = xKoord;
  }

  /**
   * hole y-Koordinate
   */
  public double getY() {
    return this.yKoord;
  }

  /**
   * setze y-Koordinate
   */
  public void setY(double yKoord) {
    this.yKoord = yKoord;
  }

  /**
   * gibt die String-Representation eines Punktes zurück
   */
  public String toString() {
    return "Punkt [x=" + xKoord + ", y=" + yKoord + "]";
  }

}

Grafische Oberfläche
Java:
 package anwendung;

import modell.Raster;
import oberflaeche.RasterOberflaeche;

/*
 * "Baupln" fuer das Programm zur Bearbeitung eines Objektes vom Typ Vektor3D
 */
public class Rasterprogramm {
  /*
   * Main-Methode
   */
  public static void main(String[] args) {
    // Anlegen des Objektes
    Raster raster = new Raster();
    // Anlegen der Oberflaeche fuer diese Objekt
    RasterOberflaeche oberflaeche = new RasterOberflaeche(raster);
    // Darstellen der Oberflaeche
    oberflaeche.stelleDar();
  }
}
Java:
 package modell;

/*
 * "Bauplan" fuer ein Raster
 */
public class Raster {
  // Rasterabstand in Pixeln
  private int abstand;

  /*
   * Konstruktor
   */
  public Raster() {
    abstand = 40;
  }

  /*
   * Setzen des Abstands
   */
  public void setAbstand(int wert) {
    abstand = wert;
  }

  /*
   * Holen des Abstands
   */
  public int getAbstand() {
    return abstand;
  }
}
Java:
 package oberflaeche;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JComponent;

import modell.Raster;

/*
 * "Bauplan" zur Darstellung eines Rasters
 */
public class RasterDarstellungGraphisch extends JComponent {

  /**
	 * 
	 */
	private static final long serialVersionUID = -8028992788842073219L;
// das darzustellende Raster
  private Raster raster;

  /*
   * Konstruktor, vermerkt das Raster
   */
  public RasterDarstellungGraphisch(Raster r) {
    raster = r;
  }

  /*
   * Ueberschrieben wird die Methode zum Darstellen
   */
  public void paintComponent(Graphics g) {
    // hole die Breite
    int breite = this.getWidth();
    // hole die Hoehe
    int hoehe = this.getHeight();

    // zeichnen des Rasters: Urspung ist linke untere Ecke
    // Koordinaten einer Rasterlinie
    int x1, x2, y1, y2;

    // Horizontal
    // Koordinaten der linken unteren Ecke
    x1 = 0;
    y1 = hoehe - 1;
    // Koordinaten der rechtern unteren Ecke
    x2 = breite - 1;
    y2 = hoehe - 1;
    // Schleife
    for (int i = 0; i <= hoehe / raster.getAbstand(); i++) {
      g.drawLine(x1, y1, x2, y2);
      y1 -= raster.getAbstand();
      y2 -= raster.getAbstand();
    }

    // Vertikal
    // Koordinaten der linken unteren Ecke
    x1 = 0;
    y1 = hoehe;
    // Koordinaten der linken oberen Ecke
    x2 = 0;
    y2 = 0;
    // Schleife
    for (int i = 0; i <= breite / raster.getAbstand(); i++) {
      g.drawLine(x1, y1, x2, y2);
      x1 += raster.getAbstand();
      x2 += raster.getAbstand();
    }

    // stelle das zweite Rasterkästchen unten links gelb dar
    Color aktuelleFarbe = g.getColor();
    g.setColor(Color.YELLOW);

    g.fillRect(raster.getAbstand() + 1, hoehe - raster.getAbstand(),
        raster.getAbstand() - 1, raster.getAbstand() - 1);

    // stelle das darüber liegende Rasterkästchen rot dar
    g.setColor(Color.RED);
    g.fillRect(raster.getAbstand() + 1, hoehe - 2 * raster.getAbstand(),
        raster.getAbstand() - 1, raster.getAbstand() - 1);
    g.setColor(aktuelleFarbe);
  }
}


Java:
 package oberflaeche;

import java.awt.BorderLayout;
import java.awt.GridLayout;


import javax.swing.JLabel;
import javax.swing.JPanel;


import modell.Raster;

/*
 * "Bauplan" fuer die Eingabe eines Rasters
 */
public class RasterEingabe {

  // das Objekt
  private Raster raster;


  // das Panel, auf dem alles dargestellt wird
  private JPanel panel;

  // die Objekte, die auf dem Panel plaziert werden
  private JLabel label;
 
 

  /*
   * Konstruktor
   */
  public RasterEingabe(Raster r, RasterDarstellungGraphisch d) {
    // Speichern der Objektreferenzen
    raster = r;
    

    // Anlegen des Panel
    panel = new JPanel();
    panel.setLayout(new BorderLayout());

    // Anlegen und Platzieren der Objekte fur die Koordinaten
    label = new JLabel(" Bausteinturm ");

    

    JPanel internesPanelOben = new JPanel();
    internesPanelOben.setLayout(new GridLayout(1, 2));

    internesPanelOben.add(label);
    

    panel.add(internesPanelOben, BorderLayout.NORTH);

 
  }

  /*
   * Holen des Panels, auf dem alles angeordnet ist
   */
  public JPanel getPanel() {
    return panel;
  }

  public Raster getRaster() {
    return raster;
  }

 
  
  
}
Java:
 package oberflaeche;

import java.awt.BorderLayout;

import javax.swing.JFrame;

import modell.Raster;


public class RasterOberflaeche {

  // Die Oberflaeche verwaltet eine Eingabe und eine Darstellung
  private RasterEingabe rasterEingabe;
  private RasterDarstellungGraphisch rasterDarstellung;

  // Die Oberflaeche wird in einem Fenster dargestellt
  private JFrame fenster;

  // Konstruktor
   
  public RasterOberflaeche(Raster r) {
    // Alles wird auf einem Fenster dargestellt
    fenster = new JFrame(" Raster ");
    fenster.setSize(700, 500);
    fenster.setLayout(new BorderLayout());

    // Erzeugen der Darstellung
    rasterDarstellung = new RasterDarstellungGraphisch(r);
    
    // Erzeugen der Eingabe
    rasterEingabe = new RasterEingabe(r,rasterDarstellung);

    // Plazieren der Eingabe
    fenster.add(rasterEingabe.getPanel(), BorderLayout.NORTH);

    // Plazieren der Darstellung
    fenster.add(rasterDarstellung, BorderLayout.CENTER);

    // Das Programm endet, wenn das Fenster geschlossen wird.
    fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

  /*
   * Methode zum Darstellen des Fensters
   */
  public void stelleDar() {
    // Das Fenster wird sichtbar.
    fenster.setVisible(true);
  }
}
 

Kevin94

Top Contributor
Ohne den gesamten Code durchgesehen habe und in dem GUI-Code irgenwo den Ansatz entdeckt zu haben, einen Turm zu zeichnen: Mit deinem jetzigen Code kannst du gar keinen invaliden Turm erzeugen, da du jedesmal, wenn das passieren würde eine Exception wirfst. Nicht nur das, du überprüfst auch jedes mal, ob alle vorherigen Steine rechtmäßig aufgesetzt wurden. Das widerspricht der Physik, das auch ein Turm stabil seien kann, der umkippen würde, wenn man den obersten Stein entfernt. (Dann müsste man den Turm zwischen durch halten/mehrer Steine gleichzeitig legen)
Ich würde in der ablegen-Methode gar nicht überprüfen, ob der Turm stabil ist, und das in einer extra Methode tuen, die vor dem Zeichnen jedesmal aufgerufen wird, damit ein instabiler Turm dann anders/nicht dargestellt werden kann. (Warum fügst du den abzulegenden Stein eigentlich immer am Anfang der Liste ein?)

PS: Der Code ist grausam: Suffixe wie I für Interface sind in Java nicht üblich/gern gesehen und solche Sachen wie Listen implementiert man nicht selbst, dafür gibts das JRE (Ich hoffe mal dich zwingt kein Lehrer dazu, das so zu machen).
 

looser88

Mitglied
Also die Berechnung bzw. Programm der Stabilität wurde mir so vorgegeben.....
Das GUI Programm teilweise auch ....
Ich weiß nicht wie ich dem GUI jetzt sage er soll mir die stabilen Türme zeichnen :(
 

L-ectron-X

Gesperrter Benutzer
Ich glaube, das ist keine so gute Idee. Damit würdest du Swing mit AWT mischen und hättest auch sonst mit einem Canvas gegenüber einer JComponent oder JPanel keinerlei Vorteile.
 

looser88

Mitglied
Hallo,
hab folgende Idee ....
Ich implementiere eine Methode die die Bausteine zählt und dann soll Sie die Bereiche ausfüllen!
Nun habe ich noch 1,2 Zuweisungsprobleme .... :(

Java:
package schnittstellen;

import ausnahmen.Listenfehler;
import ausnahmen.TurmInstabilException;

/**
 * Schnittstelle für Bausteinturm
 */
public interface IBausteinTurm {

  void legeBausteinAb(IBaustein2D b1) throws Listenfehler, TurmInstabilException;

  void ausgebenAufShell();
 // DIE NEUE METHODE
  int anzahl();
}


Hier ist am Anfang ein Fehler und am Ende bzgl. der neuen Methode

Java:
package modell;
import util.EinfachVerkettetesListenElement;
import util.ListenIterator;
import schnittstellen.IBaustein2D;
import schnittstellen.IBausteinTurm;
import schnittstellen.IIterator;
import util.EinfachVerketteteListe;
import ausnahmen.Listenfehler;
import ausnahmen.TurmInstabilException;

/**
 * Ein Bausteinturm bestehend aus n Bausteinen, abgelegt in der Reihenfolge in
 * der sie auf den Turm gelegt wurden
 */
// Hier sagt er mir die Methode anzahl wurde nicht implementiert ?!?!?!
public class BausteinTurm implements IBausteinTurm {

  //Einfach verkettete Liste zum Speichern der Bausteine
  private EinfachVerketteteListe bausteine;

  /**
   * Leerkonstruktor für einen Bausteinturm. Initialisiert die Einfach
   * verkettete Liste
   */
  public BausteinTurm() {
    this.bausteine = new EinfachVerketteteListe();
  }

  /**
   * legt einen Baustein auf den vorhandenen Turm, wenn alle statischen
   * Anforderungen erfüllt sind. Bringt der Aufzulegende Stein den Turm zum
   * Einstürzen wird der Baustein nicht abgelegt.
   */
  public void legeBausteinAb(IBaustein2D abzulegenderStein) throws Listenfehler, TurmInstabilException {

    // bei leerer Liste wird erster Stein immer abgelegt
    if (bausteine.istLeer()) {
      bausteine.fuegeAmAnfangEin(abzulegenderStein);
      System.out.println("Erster Stein: " + abzulegenderStein.toString() + " abgelegt!");
    } else {

      //globaler Iterator für Bezugsstein
      IIterator itGlobal = bausteine.iterator();
      //Überprüfung der gesamten Turmstabilität
      while (itGlobal.hatNaechsten()) {

        //Bezugstein um den das Gesamtmoment geprüft wird
        IBaustein2D bezugsStein = (IBaustein2D) itGlobal.naechster();
        IBaustein2D aktStein = abzulegenderStein;
        double resMoment = 0.0;

        //lokaler Iterator für den zu überprüfenden Teilturm
        IIterator itLokal = bausteine.iterator();

        //Errechnung des Gesamtmomentes des Teilturmes
        while (aktStein != bezugsStein && itLokal.hatNaechsten()) {

          double diffSchwerpktZuBezugsPkt = aktStein.getSchwerpunkt().getX() - bezugsStein.getRechteObereEcke().getX();
          resMoment = resMoment + diffSchwerpktZuBezugsPkt * aktStein.getLaenge() * 1 * 1;
          aktStein = (IBaustein2D) itLokal.naechster();
        }

        // wenn das Moment um den Bezugspunkt >= 0 wird der Baustein NICHT abgelegt
        if (resMoment >= 0.0) {
          throw new TurmInstabilException(abzulegenderStein.toString() + " würde den Turm zum Einstürzen bringen!");
        }
      }
      bausteine.fuegeAmAnfangEin(abzulegenderStein);
      System.out.println(abzulegenderStein.toString() + " abgelegt!");
    }
  }

  /**
   * gibt die String-Repräsentation eines Bausteinturmes zurück
   */
  public String toString() {
    String s = "";
    IIterator iterator = bausteine.iterator();
    while (iterator.hatNaechsten()) {
      s = s + iterator.naechster().toString() + '\n';
    }
    s = s + "Bodenplatte";
    return s;
  }

  /**
   * Ausgabe der Bausteine eines Bausteinturmes auf der Shell
   */
  public void ausgebenAufShell() {
    System.out.println();
    System.out.println("Liegengebliebene Bausteine des Turms:");
    System.out.println(toString());
  
// Hier zeigt er mir nen Fehler bei int an ?!?!?!? 
	public int anzahl() {
		if(istLeer()){
			return 0;
		 	}else{
		
		 		ListenIterator it = new ListenIterator(erster);
		 		while(it.hatNaechsten()){
		 			it.naechster();
		 			i++;
		 		    }
		 		    return i-1;
		 	        }
	          }
     }
}



Java:
package oberflaeche ;
import modell.BausteinTurm;
import schnittstellen.IBaustein2D;
import schnittstellen.IPunkt2D;
import schnittstellen.IIterator;
import schnittstellen.IBausteinTurm;
import util.Punkt2D;
import util.EinfachVerketteteListe;
import util.ListenIterator;
import util.EinfachVerkettetesListenElement;
import java.awt.Graphics;

import javax.swing.JComponent;

import Rastermodell.Raster;

/**
 * "Bauplan" zur Darstellung eines Rasters
 */
public class RasterDarstellungGrafisch extends JComponent {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	// das darzustellende Raster
	private Raster raster;

	/**
	 * Konstruktor, vermerkt das Raster
	 * 
	 * @param r darzusteööemdes Raster
	 */
	public RasterDarstellungGrafisch(Raster r) {
		raster = r;
	}


	/* Ueberschrieben wird die Methode zum Darstellen
	 * (non-Javadoc)
	 * @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
	 */
	public void paintComponent(Graphics g) {
		// hole die Breite
		int breite = this.getWidth();
		// hole die Hoehe
		int hoehe = this.getHeight();
	
		// zeichnen des Rasters: Urspung ist linke untere Ecke
		// Koordinaten einer Rasterlinie
		int x1, x2, y1, y2;
	
		// Horizontal
		// Koordinaten der linken unteren Ecke
		x1 = 0;
		y1 = hoehe - 1;
		// Koordinaten der rechtern unteren Ecke
		x2 = breite - 1;
		y2 = hoehe - 1;
		// Schleife
		for (int i = 0; i <= hoehe / raster.getAbstand(); i++) {
			g.drawLine(x1, y1, x2, y2);
			y1 -= raster.getAbstand();
			y2 -= raster.getAbstand();
		}
	
		// Vertikal
		// Koordinaten der linken unteren Ecke
		x1 = 0;
		y1 = hoehe - 1;
		// Koordinaten der linken oberen Ecke
		x2 = 0;
		y2 = 0;
		// Schleife
		for (int i = 0; i <= breite / raster.getAbstand(); i++) {
			g.drawLine(x1, y1, x2, y2);
			x1 += raster.getAbstand();
			x2 += raster.getAbstand();
		
	//Hier sagt er Bausteinturm.anzahl() gibts net 
	int a=BausteinTurm.anzahl();
       // Hier will er iwie iterator nicht annehmen
	while(iterator.hatNaechsten()){

	int laenge = ((int)((IBaustein2D)iterator.naechster()).getLaenge());
	
	g.fillRect(0,getHeight()-a*raster.getAbstand(),raster.getAbstand()* laenge,raster.getAbstand());
	a--;
	}
		}

}
}
 

Kevin94

Top Contributor
Formatier deinen Code richtig, dann siehst du auch den Fehler:
Java:
public int anzahl() {
        if(istLeer()){
            return 0;
        } else {
            int i=0;//Di musst du auch noch definieren.
            ListenIterator it = new ListenIterator(erster);
            while(it.hatNaechsten()){
                it.naechster();
                i++;
             }
             return i-1;
        }
    }
} // die letzte klammer ist zu viel
}
Warum dann bei int in der Signatur ein Fehler angezeigt wird ka.

Und zu RasterDarstellungGrafisch:
[JAVA=80]//anzahl() ist eine Instanzmethode, desshalb kannst du sie nicht statisch aufrufen (du brauchst ein Objekt), und mit Kompiler-Fehlern gerhts schon gar nicht
int a=BausteinTurm.anzahl();
//Die Variable iterator musst du schon definieren
while(iterator.hatNaechsten()){

int laenge = ((int)((IBaustein2D)iterator.naechster()).getLaenge());

g.fillRect(0,getHeight()-a*raster.getAbstand(),raster.getAbstand()* laenge,raster.getAbstand());
a--;
}
[/code]

Micht dünkt, dass du erstmal Grundlagen nachzuholen hast.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E mit java-anwendung internet verbindung unterbrechen Java Basics - Anfänger-Themen 5
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
P Verbindung von Zwei Kreisen löschen ! Java Basics - Anfänger-Themen 6
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
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
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
K Mail senden, nachdem Anwendung beendet wurde (gleich wie) Java Basics - Anfänger-Themen 4
P Best Practice Druck aus Java Anwendung in MacOs Java Basics - Anfänger-Themen 0
T Start-Activity für Java Maven Web-Anwendung festlegen Java Basics - Anfänger-Themen 2
J Was mache ich falsch in meiner Java Anwendung? Java Basics - Anfänger-Themen 11
I Java Anwendung auf Android portieren Java Basics - Anfänger-Themen 1
I Java FX GUI Anwendung Java Basics - Anfänger-Themen 30
F Mehrere Server Sockets in einer Anwendung Java Basics - Anfänger-Themen 9
G MapStruct Anwendung vom selbst geschriebenen Formater Java Basics - Anfänger-Themen 4
J Aktuelle Zeit in einer JavaFX Anwendung aktualisieren lassen Java Basics - Anfänger-Themen 4
S If Anwendung Java Basics - Anfänger-Themen 1
2 Verständnisproblem bei Anwendung von Lower Bounded Wildcards Java Basics - Anfänger-Themen 5
J Datentypen Anwendung von String contains Java Basics - Anfänger-Themen 4
P Klassen Richtige Anwendung einer Enum-Klasse Java Basics - Anfänger-Themen 11
R If anwendung funktioniert nicht Java Basics - Anfänger-Themen 3
W Verschiedene Bibliotheken in einer Anwendung? Java Basics - Anfänger-Themen 2
GENiALi Java Console Anwendung starten in Prozess Java Basics - Anfänger-Themen 3
A Testprogramm in java oder javascript für Windows Anwendung? Java Basics - Anfänger-Themen 1
K Objekt soll Anwendung über Änderungen informieren Java Basics - Anfänger-Themen 8
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
R Best Practice Problem Anwendung umzusetzen Java Basics - Anfänger-Themen 2
S Paint Anwendung: Freihandlinien zeichnen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben