ListIterator (next & previous methoden)

FerFemNemBem

Bekanntes Mitglied
Mahlzeit,

ich moechte gern in der GUI mit "Pfeiltasten" durch eine Liste iterieren. Dazu habe ich mir einfach aus der vorhandenen ArrayList einen ListIterator angelegt. Wenn ich nun "vorwaerts" klicke und dann auf "rueckwaerts", bleibt beim ersten Klick das alte Element stehen. Dass das so implementiert ist, sagt die JavaDoc zum ListIterator:

"Returns the next element in the list. This method may be called repeatedly to iterate through the list, or intermixed with calls to previous to go back and forth. (Note that alternating calls to next and previous will return the same element repeatedly.)"

Nun die Frage: ich moechte gern, dass sich das "vor" und "zurueck" so verhaelt, wie man das als Endnutzer erwartet - also, dass bei "vor" ein Element vor und bei "zurueck" ein Element zurueck gesprungen wird.

Wie setzt Ihr sowas um?

Danke!

Gruss, FFNB.
 
S

SlaterB

Gast
ich sähe es jetzt spontan schon generell fraglich, über mehrere User-Aktionen, mehrere Sekunden hinweg, überhaupt einen ListIterator offen zu halten,
kann niemand anders zwischendurch die Liste ändern wollen?

eine alternative Philosophie wäre, zwischen User-Aktionen die Daten 'ruhen' zu lassen, sich etwa den Index irgendwo zu merken
und bei einem 'vorwärts' oder 'rückwärts' den neuen Index zu berechnen und auf irgendeine geeignete Weise dann die Daten zu erhalten,

siehe zum Vergleich Web-Anwendungen mit Links auf neue Seiten, die auch ne Woche später noch als Bookmark funktionieren, da hält niemand irgendwo einen Iterator offen,
allerdings gibts natürlich den Punkt verketteter Listen, bei denen man sich evtl. von Anfang an bis zu einem Index durchhangeln müssen, was ja auch unschön ist,
also nicht außer Frage da mit Iterator zu arbeiten

-----

so, nach dem Blahblah:
wenn der Iterator nicht passend funktioniert musst du
a) einen anderen Iterator notfalls selbst schreiben der alles korrekt leistet, oder
b) bisschen um den vorhandenen drumherum bauen, z.B. eine boolean-Variable die die letzte Laufrichtung merkt und anhand dessen man feststellen kann ob 2x aufzurufen ist,
oder das alte Element merken und solange aufrufen bis das neue != dem alten ist,
insgesamt kommt damit quasi a) raus
 
Zuletzt bearbeitet von einem Moderator:

FerFemNemBem

Bekanntes Mitglied
Halloechen,

das Szenario ist folgendes: Es gibt eine Liste (ArrayList) mit "Tracks" also Musiktiteln in einer GUI. Du kannst fuer einen "Track" ein Eigenschaftenfenster oeffnen, um die Trackeigenschaften zu bearbeiten. Wenn Du damit fertig bist, kannst Du mittels der "vor"- und "zurueck"-Buttons zum vorherigen oder naechsten Track der Liste wechseln, um dessen Eigenschaften zu veraendern. Der Inhalt der Liste kann sich zu diesem Zeitpunkt nicht aendern.

Sowas wie in "b" von Dir angemerkt hatte ich mir auch schon ueberlegt. Dachte aber, dass es da schon was OutOfTheBox gibt, was ich evtl. nur uebersehen habe.

Dann werde ich es wohl selbst implementieren muessen.

Danke!

Gruss, FFNB.

PS: Es ist keine Webanwendung. Es ist eine Java-Swing-Desktop-Anwendung.
 

FerFemNemBem

Bekanntes Mitglied
Halloechen,

meine Loesung sieht nun so aus:

Java:
    ...
    // The track to show/edit
    private Track track;
    
    // Holds the ListIterator positioned to the current track
    private ListIterator<ModelDataSet> trackList;
    ...

    /**
     * The action listener for the "next" button.
     */
    class NextAction extends AbstractAction
    {
        // The gernerated serialVersionUID
		private static final long serialVersionUID = 9024931881886760298L;

		/**
		 * This method is called if the "next"-button was pressed.
		 * 
		 * @param e the action event.
		 */
        public void actionPerformed(ActionEvent e)
        { 
        	if(trackList.hasNext())
        	{	
        		if(trackList.next().getTrack().equals(track))
        		{
        			actionPerformed(e);
        		}
        		else
        		{
        			setTrack(trackList.next().getTrack());
        		}
        	}
        }
    }

Entsprechend dann auch der "PreviousAction"-ActionListener.

Ich denke das ist eine "OK"-Loesung ohne viel Aufwand.

Gruss, FFNB.
 
S

SlaterB

Gast
wenn im if next()-Track X vom bisherigen track Y abweicht, wird dann nicht im else nochmal mit next() eine Postion nach X weiter auf Z gesprungen?
den Wert von next() in einer Variablen speichern!
 

Ähnliche Java Themen

Neue Themen


Oben