JList - Prüfen ob Eintrag bereits existiert

programer85

Mitglied
Hey
ich arbeite grade an einem Adressbuch
eigentlich einem ganz simplen
allerdings möchte ich, dass man zu anfang sein Profil wählt
und da habe ich das jetzt schon so,
dass man Profile erstellen und löschen kann
und er die dann in einer Liste anzeigt !
Ich bin sogar schon so weit, dass er nach beenden und neustarten des Programms
immer noch die selben Einträge in der Liste hat,
da ich die Einträge in einer Datei ablege.
aber das nur btw...
Jetzt möchte ich aber, dass er beim erstellen eines neuen Profils
erstmal überprüft, ob dieser Eintrag in der Liste schon existiert...
ich habe das schon so hier probiert
Code:
        boolean existiert_schon = false;
        String Profilneu_Name = JOptionPane.showInputDialog(null, "Name für neues Profil","Neues Profil", 1);
        try{
        BufferedReader br = new BufferedReader(new FileReader(profil_liste));
        String line;

                              while ((line = br.readLine()) != null) {
                              if((line = br.readLine())==Profilneu_Name){
                                existiert_schon = true;
                              }
                              }

                              br.close();
                              } catch(IOException f) {

                              }
        if(Profilneu_Name.equals("")){
          JOptionPane.showMessageDialog(null,"Eingabe ungültig! \n Bitte anderen Namen wählen!","Eingabe ungültig",JOptionPane.ERROR_MESSAGE);
        }
        else if(existiert_schon == true){
          JOptionPane.showMessageDialog(null,"Eintrag existiert schon! \n Bitte anderen Namen wählen und/oder Profil erst löschen","Eingabe ungültig",JOptionPane.ERROR_MESSAGE);
        }

profil_liste ist in dem Fall die datei, wo all die profile abgespeichert sind.

aber da gibt er trotzdem keine Fehlermeldung aus,
wenn ich ein schon vorhandenen eintrag nochmal eingebe -.-
Hoffe auf schnelle Hilfe ...!
Danke schonmal im Voraus =)
MfG p85
 
Diese Schleife ist falsch.
Java:
while ((line = br.readLine()) != null) {
                              if((line = br.readLine())==Profilneu_Name){
                                existiert_schon = true;
                              }
                              }
1. Du führst in der Schleife nochmal br.readLine() aus, damit springst du aber schon wieder eine Zeile weiter. Das heißt du liest im Prinzip nur jede zweite Zeile ein.
2. Der Vergleichsoperator bei Objekten vergleicht nicht den Inhalt, sondern die Referenz und somit wird deine if-Abfrage immer false ergeben.
3. Variablennamen werden in Java nie groß angefangen.

So sollte es funktionieren:
Java:
while((line = br.readLine()) != null) {
    if(line.equals(Profilneu_Name)) {
        existiert_schon = true;
    }
}
 
Zuletzt bearbeitet:
Hmmm, wenn du die aktuellen Profile schon in einer Liste anzeigst, dann wäre es von der Performance sehr ungünstig, wenn du jedes mal beim Erstellen eines Benutzers die Datei durchsuchst.

Ich würde eher etwas in die Richtung machen:
Beim starten des Programmes wird einmalig die Datei durchsucht und die Einträge einem ListModel (z.B. DefaultListModel) hinzugefügt.

Code:
addElement(Object obj) 
          Adds the specified component to the end of this list.

Siehe http://java.sun.com/javase/6/docs/api/javax/swing/DefaultListModel.html

Die JList kann diesem Model zugeordnet werden.

Code:
entweder im Konstruktor:
JList(ListModel dataModel) 
          Constructs a JList that displays elements from the specified, non-null, model.

oder 

im Nachhinein mit:
setModel(ListModel model) 
          Sets the model that represents the contents or "value" of the list, notifies property change listeners, and then clears the list's selection.

Siehe http://java.sun.com/javase/6/docs/api/javax/swing/JList.html

Änderungen im Model führen auch zu Änderungen in der JList.

Das Model besitzt die Funktion

Code:
contains(Object elem) 
          Tests whether the specified object is a component in this list.

Dieses Flag kannst du dann abfragen und je nach dem wieder addElement(); ausführen. Die Datei wird dann entweder direkt nach erfolgreichen Hinzufügen eines neuen Profils oder beim Schließen des Programms upgedatet.


Edit: Hinweis - die wichtigsten Fragen sowie die schnellsten und besten Wege werden oft schon im HowTo von Sun aufgzeigt.
http://java.sun.com/docs/books/tutorial/uiswing/components/list.html
 
Zuletzt bearbeitet:
@HonniCilest:
ja da shabe ich ja auch gemacht!
ich habe ja nicht die ganze quelldatei gepostet
sondenr nur einen ausschnitt
trotzdem danke =)

@Akeshihiro:
ja das erscheint mir logisch
jetzt wo du es sagst, merke ich auch, dass das so nicht gehen kann ^^
Deine variante klappt, vielen dank =)
 

Neue Beiträge

Zurück