Ich stehe gerade vor einem Problem und komme einfach nicht drauf wie ich das angehen soll:
Visual Class:
Java:
publicvoidactionPerformed(ActionEvent arg0){// TODO Auto-generated method stubButton b =(Button)arg0.getSource();try{if(b == anlegen){int id =Integer.parseInt(getID.getText());String v =newString(getVorname.getText());String n =newString(getZuname.getText());Boolean g = checkM.getState();
c.addPerson(id, v, n, g);
getVorname.setText("");
getZuname.setText("");
getID.setText(""+c.ganz());}if(b == del){
c.delPerson(list.getSelectedIndex());}}catch(Exception e){MessageLine.setText("Es ist ein Fehler aufgetreten!");}}publicvoidupdate(Observable arg0,Object arg1){// TODO Auto-generated method stubHashMap hm =(HashMap)arg1;
list.removeAll();for(Iterator it = hm.entrySet().iterator();it.hasNext();){Map.Entry me =(Map.Entry)it.next();
list.add(me.getValue()+" "+ me.getKey().toString());}}
Klasse Controller, Löschfunktion:
Java:
publicclassControllerextendsObservable{HashMap hm =newHashMap();int id;charG;voidaddPerson(int i,String v,String n,Boolean g){Person p =newPerson(i,v,n,g);if(g){G='M';}else{G='W';}
hm.put(p, p.gid());update();}voiddelPerson(int pos){try{
hm.remove(pos);update();}catch(Exception e){System.out.println("Es ist ein Fehler aufgetreten");}}voidupdate(){setChanged();notifyObservers(hm);clearChanged();}}
Und zwar: Ich gebe Personendaten ein, dies soll in eine HashMap gespeichert werden und in einer Liste ausgegeben werden. Um die Daten zu Löschen, wähle ich in der Liste aus und drücke auf den Button löschen. Jetzt übergebe ich die Position des selectierten Datensatzes (welches in der Liste ja als String da steht) und weiß nicht mehr weiter
Ich weiß zwar die Position in der Liste, aber nicht die Position der Map.
Fehlermeldung: Syntax error on token(s), misplaced token constructor(s)
Als neue Löschfunktion hab ich die hier, die aber doch nicht so prickelnd funktioniert.
Java:
voiddelPerson(int pos){try{int i =0;for(Iterator it = hm.entrySet().iterator();it.hasNext();i=i+1){Map.Entry me =(Map.Entry)it.next();if(i==pos)
hm.remove(me.getKey());}update();}catch(Exception e){System.out.println("Es ist ein Fehler aufgetreten");}}
Bin erst jetzt darauf gekommen und hab andere ID's vorgegeben (nicht von 0,1,2,3, ... sondern durchgemischt 6453,1234, ...)
Das Löschen... in einer HashMap... mit einem Index? Kann nicht funktionieren (muss aber erstmal kapieren, was du vorhast, bevor ich da nen Tipp geben kann...)
Was ich vorhabe ist folgendes:
Ich habe 2 Fenster. In einem der beiden Fenster gebe ich Personendaten ein und gebe dem eine ID (ist gewollt), Vornamen, Nachnamen und Geschlecht.
Wenn ich auf Anlegen drücke, speichere ich die Daten in die HashMap. Anschließend wird die Update Methode aufgerufen um das 2. Fenster zu verständigen und dort gebe ich alle Daten in die Liste aus.
Nun wäre mein nächster Schritt das Löschen des gewählten Datensatzes in der Liste.
Also wenn man den key erst aus dem Objekt holen muss um danach das Objekt löschen zu können, frage ich mich schon ob die HashMap das richtige ist ??? Wenn du mit Inizes arbeiten willst währe ein Vector geeigneter.
Du köntest genau so gut HashMap<Person, Person> machen, denn geht hm.remove(me) (Nein, nicht erschlagen bitte - das ist nicht ernst gemeint)
Ich habe so ein ähnliches Bsp. schon mit Vektoren machen müssen. Das geht natürlich einfacher.
Mein Lehrer hat aber gesagt, damit wir den Umgang mit den Maps lernen, sollten wir das hier mit Map machen.
@sunny-boy
Das kann doch gar net gehen?
1. Gibts bei mir keine getSelectedValue() Methode
2. Wie willst du die ID von einem String entnehmen die in der Liste steht?
Irgendwie scheint mir die Sache grad etwas Komplex
Ich habe so ein ähnliches Bsp. schon mit Vektoren machen müssen. Das geht natürlich einfacher.
Mein Lehrer hat aber gesagt, damit wir den Umgang mit den Maps lernen, sollten wir das hier mit Map machen.
Das mit der Glaskugel ist ein stehender Begriff um auszudrücken dass etwas unklar ist ;-)
Wenn du ein Elemnt löscht versuchst du das mit dem Index der GUI - Liste (z.B. das zweite Element auf dem GUI hat den Index 1)
Aus der Map löschen musst du das aber mit dem key und der war in meinem Fall 222.
Da du ja sagst dass die Personen in einer Map bleiben müssen, muss es eine andere Möglichkeit geben vom Index auf den Key zu kommen.
1. Vorschlag generier dir einen Vector<int> in dem du die Keys in der Reihenfolge ablegst wie sie auf dem GUI erscheinen (aber beim löschen immer schön aktuell halten.)
2. Vorschlag (nachdenken was ich da genau mache kannst du selbst
Java:
voiddelPerson(int pos){try{Integer key =(Integer)hm.keySet().toArray()[pos];
hm.remove(key);update();}catch(Exception e){System.out.println("Es ist ein Fehler aufgetreten");}}