Liste - Observer/Observeable - HashMap Hilfe

O

Obli

Gast
Guten Tag Java Community :)

Ich stehe gerade vor einem Problem und komme einfach nicht drauf wie ich das angehen soll:

Visual Class:
Java:
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		Button b = (Button)arg0.getSource();
		try{
			if(b == anlegen){
				int id = Integer.parseInt(getID.getText());
				String v = new String(getVorname.getText());
				String n = new String(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!");
		}
	}
	
	public void update(Observable arg0, Object arg1) {
		// TODO Auto-generated method stub
		HashMap 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:
public class Controller extends Observable{
	HashMap hm  = new HashMap();
	int id;
	char G;
	
	void addPerson(int i, String v, String n, Boolean g)
	{
		Person p = new Person(i,v,n,g);
		if(g){ G='M'; }else{ G='W'; }
		hm.put(p, p.gid());
		update();
	}
	
	void delPerson(int pos)
	{
		try
		{
			hm.remove(pos);
			update();
		}
		catch(Exception e)
		{
			System.out.println("Es ist ein Fehler aufgetreten");
		}
	}
	
	void update()
	{
		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 :D
Ich weiß zwar die Position in der Liste, aber nicht die Position der Map.

Vielen dank für eure Hilfe!
 

Andi_CH

Top Contributor
HashMaps sollten Typisiert werden - ich habe nämlich den Verdacht, dass du etwas verdrehst. Du verwendest die Person als Key und die gid als value ...

Auf die Daten in einer HashMap greifst du besser über den key zu, als über die Position.

Ich würde vorschlagen

Java:
HasMap<int, Person>

zu verwenden.

Dann kannst du die id des zu löschenden Datensatzes übergeben und löschen.

Falls ich falsch liege habe ich vielleicht dein Problem falsch erfasst ...
 
Zuletzt bearbeitet:

sunny-boy

Mitglied
Dein Model hat doch eine einduetige ID oder?

Dann kannst du deine Person so in die Map ablegegen...

Java:
HashMap<Integer, Person> personMap = new HashMap<Integer, Person>

personMap.put(Person.getID, Person)

Da nun der Key eindeutig ist, fragst du ihn im Listenelement ab und suchst in der Liste.
 
O

Obli

Gast
Oh mein Gott, was für ein billiger Fehler :)
Da habe ich wohl was verwechselt, hehe.

Danke Andi_CH und sunny-boy!
 
O

Obli

Gast
Ouh, gerade ist mir aufgefallen dass er ab "new" bis zum Semicolon alles rot unterwellt.

Java:
HashMap<Integer, Person> hm = new HashMap<Integer, Person>;

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:
void delPerson(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, ...)

Danke!
 

Marco13

Top Contributor
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...)
 
O

Obli

Gast
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.

mfg
 

sunny-boy

Mitglied
Den Wert aus der markierten Liste in person speichern
Java:
Person person = meineListe.getSelectedValue();

Jetzt kannst du löschen
Java:
delPerson(person.getID());

Die Schleife in delPerson(int pos) kannst du dir sparen, wenn du den Key kennst und nur einen Wert löschen willst.
Java:
public void delPerson(int pos) {
  if (pos == 0 || !hashmap.containsValue(pos)) {
    return;
  } else { 
    hashmap.remove(pos);
}
 
Zuletzt bearbeitet:

Andi_CH

Top Contributor
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)
 
O

Obli

Gast
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 :D
 

sunny-boy

Mitglied
Also hier mal ein kleiner Versuch, vll hilft es ja.
Erstmal die Liste
Java:
final JList list = new JList();
        list.setModel(new AbstractListModel() {
            Person p1 = new Person("Dennis", 23);
            Person p2 = new Person("Chris", 25);
            Person[] values = new Person[] {p1,p2};

Hier ein Testbutton...
Java:
JButton btnOk = new JButton("OK");
        btnOk.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                Person person = (Person) list.getSelectedValue();
                System.out.println(person.getName());
                
            }
        });

Jetzt noch toString() überschreiben z.B.:

Java:
public String toString() {
            return "" + name;
        }
 

Andi_CH

Top Contributor
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.

Du hast duch ein Gui (Wie gesagt, bin kein GUI-Guru) aber die Personen werden irgendwie im GUI dargestellt und dann - Klick - diese löschen.

Also schau doch, dass die ID der Person vom GUI in deine Businesslogik gegeben wird - damit ist das Problem gelöst ....

Ansonsten - meine Glaskugel ist immer noch in Reparatur - wie wärs mit dem ganzen Code - oder ist der zu riesig? (Geht auch als zip-File)
 

Andi_CH

Top Contributor
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:
	void delPerson(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");
		}
	}
 
Zuletzt bearbeitet:
O

Obli

Gast
Hey Andi!
Könntest du mir das bitte erklären? "Abschreiben" kann ja jeder, davon habe ich aber nichts ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Liste in Variable speichern Java Basics - Anfänger-Themen 6
R Liste und Arrays Java Basics - Anfänger-Themen 12
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
M Verkettete Liste Java Basics - Anfänger-Themen 1
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
E Elemente aus Liste entfernen und hinzufügen Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
B Objekt aus generalisierter Liste entfernen Java Basics - Anfänger-Themen 11
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
E Suchfunktion in einer Liste Java Basics - Anfänger-Themen 39
T ungeordnete Werte-Paare in einer Liste Java Basics - Anfänger-Themen 7
L Hilfe! Liste mit Items werden ausgegeben aber nicht in zufälliger Reihenfolge Java Basics - Anfänger-Themen 6
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
f3mys Objektwerte in Liste speichern und wieder abrufen Java Basics - Anfänger-Themen 23
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
K Warum ist die binäre Suche bei der verketteten Liste nicht so effektiv? Java Basics - Anfänger-Themen 3
I 2D-Array Position der Liste ausgeben. Java Basics - Anfänger-Themen 2
I Liste von Infos von einer eigenen Annotation in Liste speichern Java Basics - Anfänger-Themen 0
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
thor_norsk Verkette Liste Java Basics - Anfänger-Themen 27
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
R einfach verkettete Liste Java Basics - Anfänger-Themen 1
R einfach verkettete Liste Java Basics - Anfänger-Themen 12
O Doppelt verkette Liste Element löschen Java Basics - Anfänger-Themen 15
B GUI extension mit einer Liste verbinden Java Basics - Anfänger-Themen 1
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
M Java Liste streamen Java Basics - Anfänger-Themen 10
AmsananKING Aussortierung einer Liste Java Basics - Anfänger-Themen 8
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
A Korrigierte <String> Liste zurückgeben Java Basics - Anfänger-Themen 22
S Kann nicht auf die Liste zugreifen mit der Methode!? Java Basics - Anfänger-Themen 3
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
J Doppelt verkette Liste ich bitte um Hilfe Java Basics - Anfänger-Themen 4
I Liste gruppieren nach Monat? Java Basics - Anfänger-Themen 5
districon Element in Liste einfügen Java Basics - Anfänger-Themen 1
B Hilfe bei Map Liste erstellen Java Basics - Anfänger-Themen 10
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
Y Knoten an einem gegebenen Index aus einer Liste entfernen. Java Basics - Anfänger-Themen 6
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
Gaudimagspam Linked Liste Java Basics - Anfänger-Themen 4
Z Liste umkehren Java Basics - Anfänger-Themen 1
S Eine Liste kopieren Java Basics - Anfänger-Themen 13
java3690 Java- liste füllen ud die werte addieren Java Basics - Anfänger-Themen 13
java3690 Liste mit zufälligen zahlen füllen Java Basics - Anfänger-Themen 27
java3690 eine liste sortieren Java Basics - Anfänger-Themen 12
J Element aus Liste nehmen Java Basics - Anfänger-Themen 3
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
P Was genau bringt mir es ein Array in eine Liste zu bringen Java Basics - Anfänger-Themen 3
A Doppelt verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 17
P Verschachtelte Array Liste Java Basics - Anfänger-Themen 2
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
P Performance Array und Liste Java Basics - Anfänger-Themen 13
M QuickSort und Liste Java Basics - Anfänger-Themen 6
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
B Summe von Property innerhalb einer Liste via Lambda Java Basics - Anfänger-Themen 1
V Collections int Werte in einer Liste sortieren Java Basics - Anfänger-Themen 23
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
V_Fynn03 Beliebiges Element in einer Liste löschen (Java)(Lineare Datenstrukturen) Java Basics - Anfänger-Themen 9
L Baum aus Integer Liste erstellen Java Basics - Anfänger-Themen 0
CptK Koordinate in Liste suchen Java Basics - Anfänger-Themen 20
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
D Doppelt Verkettete Zirkular-Liste Java Basics - Anfänger-Themen 1
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
M Array liste Verdrehen Java Basics - Anfänger-Themen 8
A Verkettete Liste Java Basics - Anfänger-Themen 2
J Strings untereinander in einer Liste vergleichen Java Basics - Anfänger-Themen 18
B Liste von Tagen generieren ab einem bestimmten Datum und Endedatum Java Basics - Anfänger-Themen 4
S IndexOutOfBoundsException beim hinzufügen eines Elements zu einer Liste Java Basics - Anfänger-Themen 11
B Liste sortieren? Java Basics - Anfänger-Themen 4
O Anonyme Klasse einer Liste erstellen Java Basics - Anfänger-Themen 7
B SWAP List; Liste neu anordnen Java Basics - Anfänger-Themen 4
B CSS Klassen in eine Liste schreiben Java Basics - Anfänger-Themen 4
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
L verkettete Liste Java Basics - Anfänger-Themen 15
scratchy1 doppelt verkettete Liste testen Java Basics - Anfänger-Themen 8
O ADT Liste z. B. Java Basics - Anfänger-Themen 15
B sortierte Liste Java Basics - Anfänger-Themen 4
O Knoten und Liste verarbeitung Java Basics - Anfänger-Themen 20
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
J Eine Liste von Listen erstellen Java Basics - Anfänger-Themen 11
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8
Queiser Liste zurückgeben Java Basics - Anfänger-Themen 7
T Collections Geeignete Collection/Liste/Datenbank Java Basics - Anfänger-Themen 17
S spezielle Wörter aus Liste entfernen Java Basics - Anfänger-Themen 2
H Verkettete Liste Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben