Java Liste mit TextArea ausgeben lassen

Nanotic

Lieutenant
Registriert
Sep. 2010
Beiträge
560
[Erledigt] Liste mit TextArea ausgeben lassen

Hallo liebe Community,

hänge grade an einem kleinen Programm um mir ein eigenes Telefonbuch zuerstellen.

Die Verwaltungsklasse sieht wie folgt aus:

Code:
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class AdressverwaltungGUI extends Frame implements ActionListener
{
  Label lbVorname, lbName, lbOrt;
  TextField tfVorname, tfName, tfOrt;
  TextArea taAusgabe;
  Button btAdresseeintragen, btProgrammende;
  
  public AdressverwaltungGUI(String fenstertitel)
  {
    super (fenstertitel);
    this.setSize (700,500);
    this.setLayout (null);
    
    lbVorname = new Label("Vorname:");
    lbVorname.setBounds(10,40,130,30);
    this.add(lbVorname);
    lbName = new Label("Name:");
    lbName.setBounds(200,40,130,30);
    this.add(lbName);
    lbOrt = new Label("Ort");
    lbOrt.setBounds(10,150,130,30);
    this.add(lbOrt);
    
    tfVorname = new TextField();
    tfVorname.setBounds(10,80,180,30);
    this.add(tfVorname);
    
    tfName = new TextField();
    tfName.setBounds(200,80,180,30);
    this.add(tfName);
    
    tfOrt = new TextField();
    tfOrt.setBounds(10,200,180,30);
    this.add(tfOrt); 
    
    
    TextArea  taAusgabe = new TextArea(40,40);
    taAusgabe.setBounds(400,50,600,600);
    this.add(taAusgabe);
    taAusgabe.insert("*** MEIN ADRESSBUCH ***", 0);
    taAusgabe.setEditable(false); 
    
    
    
    btProgrammende = new Button ("Programmende");
    btProgrammende.addActionListener(this);
    btProgrammende.setBounds (10,650,180,30);
    btProgrammende.setBackground(Color.red);
    this.add (btProgrammende);
    
    btAdresseeintragen = new Button ("Adresse eintragen");
    btAdresseeintragen.addActionListener(this);
    btAdresseeintragen.setBounds (200,650,180,30);
    btAdresseeintragen.setBackground(Color.green);
    this.add (btAdresseeintragen);
    
    this.addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent e)
      {System.exit(0);}
    }
    );
    
  }
  
  public void actionPerformed (ActionEvent ae)
  {
    Object o = ae.getSource ();
    
    Vector<Object> liste = new Vector<Object>();
    
    if(o == btAdresseeintragen)
    {
      String vorname = tfVorname.getText();
      String name = tfName.getText();
      String ort = tfOrt.getText();
      tfVorname.setText("");
      tfName.setText("");
      tfOrt.setText("");
      Bewohner tmp = new Bewohner(vorname,name,ort);
      liste.add(tmp);
      taAusgabe.append((tmp.getVorname()));
      taAusgabe.append((tmp.getName()));
      taAusgabe.append((tmp.getOrt()));
    }
    
    if (o == btProgrammende)
    {
      System.exit(0);
    }
  }
  
  
}

Es kommt immer eine NullPointerException bei Zeile 86.
Das besagt ja, dass dort ein 'null'-Wert ist.

Wie bekomme ich es hin, dass mir das Fenster die Liste immer wieder aktuell ausgibt?

Danke im Voraus!
 
Zuletzt bearbeitet:
Weshalb?
Wenn ich dort 2 int-Werte für die Größe der TextArea eingebe, kommt trotzdem eine NPE.
 
Debuggen musst du schon selbst, guck ob tmp korrekt initialisiert wurde, wenn nicht liegt es an dem Ding in Zeile 41.
 
Habe den Code in der Zeile 41 nun verändert.

Ich gebe der TA doch Informationen in Zeile 86-89, oder etwa nicht?
 
Deine TextArea taAusgabe hat nicht von Anfang an einen Inhalt, dessen privater String(oder was auch immer genutzt wird) der den Inhalt repräsentiert wird dann wohl noch null sein, du willst dann aber in Zeile 86 folgend etwas appenden, also etwas an null anhängen = Methode auf NullObjekt aufrufen -> NullPointerException.
 
Und wie gebe ich ihr einen Inhalt?

So? :

Code:
 TextArea taAusgabe = new TextArea("*** MEIN ADRESSBUCH ***",40,40);
 
Zuletzt bearbeitet:
Da ich auch grad was ähnliches mache, schlage ich vor du probierst es mit einem JavaFX-Projekt. LINK, habe damit meine letzte Programmieraufgabe gelöst, wobei wir noch eine Anbindung zur Datenbank HSQLDB gemacht haben. (awt/swing sei schon veraltet haben sie uns gesagt, wobei ich mit awt/swing keine Erfahrung habe).
 
Wollte es mit TextArea versuchen, da ich mich erst langsam an Java herantasten werde.

Wie geht es nun?
 
Hm nein, ich lag falsch.
Die TextArea wird mit dem leeren String erstellt, die ist also schon sicher vor sowas: http://docs.oracle.com/javase/7/docs/api/java/awt/TextArea.html.

Dann würde ich mal behaupten. dass wohl Bewohner.getName etc. null zurückliefern, fang das mal ab bzw. gib es dir aus.

Beseitige erstmal den Fehler.
Auf JavaFX umzusteigen mag zwar sinnvoll sein, aber hat ja nichts mit deinem Problem zu tun.
 
@DaysShadow: Ganz kalt. ;)
Der Fehler liegt nach wie vor in Zeile 41. Ich komm' jetzt nicht auf das Fachwort, hat aber was mit der Instanzvariable zu tun (bzw. eben genau das nicht)

Google hilft: Nennt sich "verdecken".
 
Zuletzt bearbeitet:
Bewohner.getName etc. liefern ihre Werte zurück.
Daran kann´s nicht liegen.

Wie kann ich die NPE wegbekommen und die Ausgabe durch das TA schaffen?
 
Was soll an Zeile 41 falsch sein?
Er legt ein Objekt an, fertig.

Also erklärs mir, ich würde wirklich gerne wissen was da groß passieren soll und den Fehler da unten verursacht^^

Edit: Aaaach klar.

Du legst in Zeile 41 eine lokale Variable mit dem gleichen Namen an wie deine Variable die du deiner Klasse gegeben hast.
Mach das TextArea in Zeile 41 weg und in allen Zeilen in denen du eigentlich deine Variablen der Klasse belegen möchtest.

Unten fragst du dann aber deine Variable der Klasse ab die aber noch null ist ;)
 
Zuletzt bearbeitet:
Jetzt klappt es.

Danke!

Noch eine kleine Frage um mein Programm zu vereinfachen:

Wenn ich alle 3 Werte eingegeben habe, möchte ich es so haben, dass er mit ENTER automatisch den Wert speichert und ausgibt.

Wie ist dies zu realisieren?
 
Zuletzt bearbeitet:
Danke hat sogar auf Anhieb funktioniert!

Habe nun die Idee, Einträge zu löschen.

Hier ein Vorschlag:

Code:
if (o == btIndexdelet) 
    {
      String index = tfIndex.getText();
      int zahl = Integer.parseInt(index);
      liste.remove(zahl);
      for (int i = 0; i<liste.size() ;i++ ) 
      {
        Object k = liste.get(i);
        while (true) 
        { 
          taAusgabe.append((String)k);
          false;
        } // end of while
      } // end of for
    } // end of if
  }
 
Zuletzt bearbeitet:
Schöne Endlosschleife. Mir gefällt vor allem das false; :freaky:

Das du die Liste benutzt ist ok, aber wenn du den Code von oben nicht geändert hast, ist die immer leer.
 
Wieso sollte die Liste leer sein?

Das mit dem True und False war einfach nur dahingeschrieben. Mir geht es hauptsächlich darum, etwas in der Liste zu löschen und dann das aktuelle Adressbuch darzustellen.
 
Welche Liste? In dem Eingangsbeispiel gibt es keine Liste mit Strings! Ich persönlich würde heutzutage übrigens unbedingt Generics verwenden ;)
 

Ähnliche Themen

Zurück
Oben