# Hilfe bei einer java buch übung



## Christoph veit (14. Feb 2015)

Hallo Leute 
Ich hatte in einem meiner Lernbücher eine Aufgabe. Ich musste ein Applet mit einer Mittelwertberechnung schreiben.
Das ist der Code:

```
import java.applet.Applet;
import java.awt.Button;
import java.awt.Event;
import java.awt.Font;
import java.awt.Label;
import java.awt.TextField;

public class Mitelwert extends Applet {

  Label labText;
  TextField tfZahl1, tfZahl2, tfAusgabeMitelwert;
  Button bRechneMitelwert, bLöschen;
  Font fntFett, fntHead, fntAusgabe;
  private double zahl1, zahl2, ausgabe;

  public void init() {
    setLayout(null);

    fntFett = new Font("SansSerif", 1, 14);
    fntHead = new Font("SensSerif", 1, 20);
    fntAusgabe = new Font("Monospaced", 0, 12);

    labText = new Label("Das Applet berechnet Mittelwerte");
    labText.setBounds(50, 30, 600, 25);
    labText.setFont(fntFett);
    add(labText);

    tfZahl1 = new TextField("");
    tfZahl1.setBounds(50, 65, 140, 25);
    tfZahl1.setFont(fntHead);
    add(tfZahl1);

    tfZahl2 = new TextField("");
    tfZahl2.setBounds(210, 65, 140, 25);
    tfZahl2.setFont(fntHead);
    add(tfZahl2);

    bRechneMitelwert = new Button(" Rechne Mitelwert");
    bRechneMitelwert.setBounds(135, 110, 135, 25);
    bRechneMitelwert.setFont(fntFett);
    add(bRechneMitelwert);

    tfAusgabeMitelwert = new TextField("");
    tfAusgabeMitelwert.setEditable(false);
    tfAusgabeMitelwert.setBounds(135, 150, 135, 25);
    tfAusgabeMitelwert.setFont(fntHead);
    add(tfAusgabeMitelwert);

    bLöschen = new Button("Löschen");
    bLöschen.setFont(fntFett);
    bLöschen.setBounds(135, 210, 135, 25);
    add(bLöschen);
  }

  public void clickBerechneMitelwert() {
// hir ist der feler ichfind in niecht
    zahl1 = tfZahl1;
    zahl2 = tfZahl2;
    double[] zahlen = new double[2];
    double[] = zahl1;
    double[] = zahl2;
    ausgabe = zahlen / 2;
    tfAusgabeMitelwert.getText(ausgabe);
  }

  public void clickLöschen() {
    tfZahl1.setText("");
    tfZahl2.setText("");
    tfAusgabeMitelwert.setText("");
  }

  public boolean handleEvent(Event e) {
    if (e.target == bLöschen && e.id == Event.ACTION_EVENT) {
      clickLöschen();
    }
    if (e.target == bRechneMitelwert && e.id == Event.ACTION_EVENT) {
      clickBerechneMitelwert();
    }
    return false;
  }
}
```
Das war ja noch klar, aber dann ist die nächste Aufgabe gekommen. Ich muss die Programmabfolge der handleEvent Methode in eine start() und paint() Mehtode schreiben.
Was natürlich zu einer Fehlermeldung führte und jetzt komm ich zu meiner eigentlichen Frage: Was muss ich ändern, dass es kompilierbar wird?
Ich würde mich echt freuen, wenn mir wer helfen könnte.
lg Christoph


----------



## Flown (14. Feb 2015)

Lieber Christoph,

Legasthenie ist wirklich was wofür man nichts kann, aber in der heutigen Zeit gibt es Programme die dir helfen können, wie zum Beispiel Micrsoft Word oder andere Textverarbeitungsprogramme.

Ich hab jetzt deinen Text ausgebessert und hoffe du nimmst meinen Ratschlag an.

Hier dein Programm mit etwaigen Verbesserungen:


```
import java.applet.Applet;
import java.awt.Button;
import java.awt.Font;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Mittelwert extends Applet {

  private TextField tfZahl1, tfZahl2, tfAusgabeMittelwert;

  @Override
  public void init() {
    setLayout(null);

    Font fntFett = new Font("SansSerif", 1, 14);
    Font fntHead = new Font("SensSerif", 1, 20);
    Font fntAusgabe = new Font("Monospaced", 0, 12);

    Label labText = new Label("Das Applet berechnet Mittelwerte");
    labText.setBounds(50, 30, 600, 25);
    labText.setFont(fntFett);
    add(labText);

    tfZahl1 = new TextField("");
    tfZahl1.setBounds(50, 65, 140, 25);
    tfZahl1.setFont(fntHead);
    add(tfZahl1);

    tfZahl2 = new TextField("");
    tfZahl2.setBounds(210, 65, 140, 25);
    tfZahl2.setFont(fntHead);
    add(tfZahl2);

    Button bRechneMittelwert = new Button(" Rechne Mitelwert");
    bRechneMittelwert.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        clickBerechneMittelwert();
      }
    });
    bRechneMittelwert.setBounds(135, 110, 135, 25);
    bRechneMittelwert.setFont(fntFett);
    add(bRechneMittelwert);

    tfAusgabeMittelwert = new TextField("");
    tfAusgabeMittelwert.setEditable(false);
    tfAusgabeMittelwert.setBounds(135, 150, 135, 25);
    tfAusgabeMittelwert.setFont(fntAusgabe);
    add(tfAusgabeMittelwert);

    Button bLoeschen = new Button("Löschen");
    bLoeschen.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        clickLoeschen();
      }
    });
    bLoeschen.setFont(fntFett);
    bLoeschen.setBounds(135, 210, 135, 25);
    add(bLoeschen);
  }

  public void clickBerechneMittelwert() {
    double zahl1 = Double.valueOf(tfZahl1.getText());
    double zahl2 = Double.valueOf(tfZahl2.getText());
    double ausgabe = (zahl1 + zahl2) / 2d;
    tfAusgabeMittelwert.setText(String.valueOf(ausgabe));
  }

  public void clickLoeschen() {
    tfZahl1.setText("");
    tfZahl2.setText("");
    tfAusgabeMittelwert.setText("");
  }
}
```


----------



## Christoph veit (15. Feb 2015)

Danke für den Tipp.
Aber du hast meine Frage nicht beantwortet.
Was muss ich ändern, dass es in der paint() und start() Methode funktioniert?


----------



## Flown (15. Feb 2015)

Also wenn du nicht die ganze Aufgabenstellung postest, dann kann ich dir leider nicht helfen. Die paint-Methode ist dazu da, damit man "händisch" auf die Leinwand malt, darum seh ich persönlich keinen Sinn diese miteinzubinden.

Dein Programm erstellt die UI schon in der init()-Methode. Also seh ich auch keinen Sinn diese in die start()-Methode umzulagern.


----------



## Christoph veit (15. Feb 2015)

Die erste Aufgabe kennst du ja schon, das mit der Mittelwertberechnung. Danach kam diese Aufgabe:
Was passiert, wenn Sie die gleiche Anweisungsfolge, die Sie zur Mittelwertberechnung programmiert haben, nicht in einer Event-Handling-Methode, sondern 
a) in der start-Methode des Applets
b) in der paint-Methode des Applets einbauen?
Unter welchen Bedingungen wird die Berechnung ausgeführt?


----------



## Flown (15. Feb 2015)

Ja das sind zwei theoretische Fragen.

a) Die Berechnung des Mittelwertes werden nur bei Start des Applets ausgeführt.
b) Die Berechnung findet immer dann statt, wenn das Applet - der Inhalt - neu gezeichnet wird.


----------



## Christoph veit (16. Feb 2015)

Eins noch Unter welchen Bedingungen wird die Berechnung ausgeführt? 
Weil wenn  ich die Abfolge der Event Händler Methode in die start() und paint() Methode schreibe 
, wirft es ein Fehlermeldung .
Muss ich da nur ein Hendel Event Objekt erzeugen oder liege ich da Falsch.

```
public void start()
{
     if (e.target == bLöschen && e.id == Event.ACTION_EVENT) {
clickLöschen();
}
if (e.target == bRechneMitelwert && e.id == Event.ACTION_EVENT) {
clickBerechneMitelwert();
}
return false;
}
```
Und das gleich bei der paint Methode


----------

