Collections Emailadressen

bluebaby

Aktives Mitglied
Hallo,
Ich hab ein Problem mit meiner Aufgabe und zwar soll ich ein GUI zu meiner Aufgabe Emailadresse schreiben. Das Problem ist jetzt das ich nicht weiss wie ich die Methoden von der Klasse Emailadresse verwenden kann, damit die Funktion beim Drücken des Buttons ausgeführt wird. Also zb.: man drückt auf den Button hinzufuegen und es soll die Funktion der Methode hinzufuegen ausgeführt werden. Das Ergebnis soll im Textfeld stehen.
Bitte um Hilfe

Die Klasse Emailadresse:
Java:
 import java.util.*;

/**
 * Die Klasse Emailadress gibt zu einen Namen alle Email-Adressen aus.
 * @author 
 * @version 30.5.2011
 */
public class Emailadress {
    private Map<String,List> mails;

    /**
     * Konstruktor 
     */
    
    public Emailadress(){
        mails = new TreeMap<String,List>(); //TreeMap erzeugen
    }

    /**
     * Gibt nur den Namen einer Email zurück.
     *
     * @param name Name der gegegeben ist
     * @param mail Neu zu zuordnende Emailadresse.
     * 
     */
    
    public boolean hinzufuegen(String name,String mail){
        List mailslist = mails.get(name);
        mailslist.add(mail);
        mails.put(name,mailslist); 
        return true;


    }

    /**
     * Fügt einen neuen Namen und dazugehorige EmailAddresse hinzu
     *
     * @param name Neuer Name
     * @param emails jede Email wird nur einmal verwendet.
     */
    
    public boolean hinzufuegenNeu(String name,LinkedList emails){
        mails.put (name,emails);
        return true;


    }

    /**
     * Bearbeiten eines Namens.
     *
     * @param name     gegebender Name
     * @param email    die Email die gändert werden soll
     * @param neuEmail Die Email die neu hinzugefuegt wird.
     * 

     */
    
    public boolean bearbeiten(String name,String email, String neuEmail){
         List mailslist = mails.get(name);
         
         if( mailslist.contains(email)){
             mailslist.add(neuEmail);
             mailslist.remove(email);
             mails.put(name,mailslist); 
             return true;
         }
         else{
             return false;
         }


    }

    /**
     * Methode zum löschen eines Namens und der dazugehörigen Emailadresse.
     *
     * @param name Zu löschender Eintrag.
     * 
     */
    
    public boolean loeschenEintrag(String name){
        mails.remove(name);
        return true;
    }

    /**
     * Löscht eine Email durch den Namen.
     *
     * @param name
     * @param email
     * 
     */
    
    public boolean loeschenEmail(String name,String email){
        List mailslist = mails.get(name);
         if(mailslist.contains(email)){
             mailslist.remove(email);
             mails.put(name,mailslist); //TreeMap überschreibt den Eintrag automatisch.
             return true;
         }
         else{
             return false;
         }

    }

    /**
     * Anzeigen eines Eintrages ( Email und Name).
     *
     * @param  name  Anzuzeigender Name.
     * @return txt   Gibt den ganzen Eintrag in einem String zurück.
     */
    
    public String zeigeName(String name){
         List mailslist = mails.get(name);
         String txt =mailslist.toString();
         return txt;

    }

    /**
     * Zeigt alle EmailAdressen und den dazugehörigen Namen an.
     *
     * 
     */
    
    public String machArray(){
      String txt="";
      Set eintraege = mails.entrySet();// TreeMap wird zu TreeSet
      Iterator i2 = eintraege.iterator(); //Iterator um den Eintrag auszugeben
      while (i2.hasNext()) {
         Map.Entry entry = (Map.Entry)i2.next();
         Object key = entry.getKey();  // Gibt den Schlüssel zurück
         Object value = entry.getValue();  // Gibt den Wert zurück
         txt = txt +(key + " : " + value+"\n");
         
      }
      return txt;

    }



}







Die Klasse Guiemailadresse:
Java:
 import static javax.swing.JOptionPane.*;
import java.awt.event.*;
import java.applet.*;
import java.awt.*;
import java.util.*;
import java.io.*;


/**
 * Die Klasse Guiemailaddress zeigt die Graphische Oberfläche für die Klasse Emailaddress.
 * 
 * @author 
 * @version 30.5.2011
 */
public class Guiemailaddress extends Applet{
   private Button hinzufuegen;   // Ein Button hinzufuegen um eine Emailaddresse und Namen hinzufuegen
   private Button neuhinzufuegen;       // Gibt einen neuen Namen und Emailaddresse
   private Button bearbeiten;           // Loescht zb.: die alte Emailadresse und fuegt eine Neue hinzu
   private Button loescheeintrag;       // loescht einen ganzen Eintrag(Name+Email)
   private Button loescheemail;         // loescht nur die Emailaddresse einer Person
   private TextField text;              // Textfeld um die Emailaddressen anzuzeigen
   String anzeige;
   
   public void init(){
       
       
       ActionHandler handler=new ActionHandler();       
       hinzufuegen=new Button("hinzufuegen");                   // Alle Button werden erzeugt
       neuhinzufuegen=new Button("neuhinzufuegen");
       bearbeiten=new Button("bearbeiten");
       loescheeintrag=new Button("loesche Eintrag");
       loescheemail=new Button("loesche Email");
       
       
       text= new TextField();  // Textfeld erzeugen
       anzeige= "";
       text.setEditable(false);  // Diese Methode legt fest, ob man später noch in das Textfeld schreiben darf
       text.setBackground(Color.WHITE); // Anfangshintergrund 
       text.setText("Hier stehen die EmailAddressen");    
       
       GridLayout g1=new GridLayout(1,2);       // Layout setzten
       setLayout(g1);
       
       add(text);
       Panel p1=new Panel();         // Panel fuer alle Button und für das Textfeld
       p1.setLayout(new GridLayout(5,1));
       p1.add(hinzufuegen);
       p1.add(neuhinzufuegen);
       p1.add(bearbeiten);
       p1.add(loescheeintrag);
       p1.add(loescheemail);
       add(p1);
       
       
       hinzufuegen.addActionListener(handler);              // alle Button werden bei den ActionListener angemeldet
       neuhinzufuegen.addActionListener(handler);
       bearbeiten.addActionListener(handler);
       loescheeintrag.addActionListener(handler);
       loescheemail.addActionListener(handler);
       text.addActionListener(handler);
       
    }
    
    
    
    private class ActionHandler implements ActionListener {
        
        /**
         * Diese Methode prüft welcher Button gedrückt wurde und führt darauf hin die dazu gehörende Methode aus.
         * 
         */
        
        public void actionPerformed (ActionEvent e) {
            
            if(e.getSource()==hinzufuegen){
                
               // String t=showInputDialog("Bitte geben Sie ihre Emailaddresse ein");
                
                Emailadress e1=new Emailadress();
                e1.hinzufuegen("Antonio","SacredDevil5@hotmail.com");
                
                anzeige="";
                anzeige=anzeige + e1.hinzufuegen("Antonio","SacredDevil5@hotmail.com");
               
                text.setText(anzeige);
               //  e1.machArray();
                
             //   if(t=="SacredDevil5@hotmail.com") {                   
            //    anzeige="Ihr Name ist"+"   "+"Antonio";
            //    text.setText(anzeige);
            // }
               // anzeige="Diese Emailaddresse existiert in unseren Daten nicht";
               //  text.setText(anzeige);
         }
        
        
           if(e.getSource()==neuhinzufuegen){ 
               
            String s=showInputDialog("Bitte gebe Sie einen Namen ein");
            String t=showInputDialog("Bitte geben Sie ihre Emailaddresse ein");
                
                
                anzeige=s+"    "+t;
                text.setText(anzeige);
        }
        
          if(e.getSource()==bearbeiten){
              
             
                  
              String s1=showInputDialog("Bitte geben Sie einen neuen Namen ein");
              String s2=showInputDialog("Bitte geben Sie eine neue Emailaddresse ein");             
                  
              anzeige=s1+"   "+s2;
              text.setText(anzeige);
              
              // im textfeld anzeigen
               
        }
        
         if(e.getSource()==loescheeintrag){
             
             anzeige="";
             text.setText(anzeige);
               
        }
        
         if(e.getSource()==loescheemail){
            
             Emailadress e2=new Emailadress();
             e2.loeschenEmail("Testuser","Testuser@hotmail.com");
             
          //  String t=showInputDialog("Bitte geben Sie ihren Namen ein");
          //  anzeige=t+"   "+"Ihre Emailaddresse wurde geloescht";
           // text.setText(anzeige);
             
            // im textfeld anzeigen
               
        }
    }
  }
}

lg blue
 

Spin

Top Contributor
Hallo,

das Ergbnis steht nicht im Textfeld?
Wo steht es denn, geht er überhaupt in deiner actionPerformed? Hast du mal debugged?

Woher kennt dein handler überhaupt hinzufuegen?
Der Button ist private und du greifst auf ihn in einer anderen Klasse zu. Zu mem ist dein Actionhanlder auch private , das kann alles nicht klappen.

Nimm dein Button und füge ein ActionCommand hinzu , den nennst du ("hinzufuegen")

Im Actionhandler prüfst du denn .. e.getActionCommand().equals("hinzufuegen")

Dann geht er auch da rein und schreibt alles ins Textfeld.

grüße spin
 

eRaaaa

Top Contributor
Der Button ist private und du greifst auf ihn in einer anderen Klasse zu. Zu mem ist dein Actionhanlder auch private , das kann alles nicht klappen.

Hä wieso denn das? Doch doch, das klappt so schon, verwirre ihn nicht :)

Also ich verstehe noch nicht ganz was überhaupt gemacht werden soll. Du erstellst jedes mal ein neues Emailadressen-Objekt, so mit hast du dann auch mehrere Maps, das ist doch sicherlich nicht Sinn der Sache oder?
Mir scheint auch eher der Fehler dann in der Klasse Emailadress zu liegen.
Java:
				Emailadress e1 = new Emailadress();
				e1.hinzufuegen("Antonio", "SacredDevil5@hotmail.com");
aber hinzufuegen sieht ja so aus
Java:
    public boolean hinzufuegen(String name,String mail){
        List mailslist = mails.get(name);
        mailslist.add(mail);
        mails.put(name,mailslist); 
        return true;
    }

wenn in der Map noch nichts drin steht, ist doch klar dass du dann dort eine Exception bekommst, denn
Code:
get
wird vermutlich
Code:
null
liefern!

D.h. du müsstest erst mit neu hinzufügen einen Eintrag erstellen mit dem Namen "Antonio", dann sollte auch das andere alles ohne Exception laufen.

Hast du die Klasse Emailadress geschrieben?
 

bluebaby

Aktives Mitglied
Hallo,
Die Klasse Emailadresse hab ich einigermaßen selber geschrieben. Und ja ich bekomme immer eine nullpointer exception. Wie kann ich das Verhindern?
lg blue
 
M

Marcinek

Gast
Indem man nicht auf referenzen zugreift, die "null" sind ;)

In der NPE steht in welcher Zeile der Fehler kommt.

In der Zeile gibt es eine referenz die kein objekt hat.

Gruß,

Martin
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben