java-forum.org - Java programmieren aus Leidenschaft

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 08.12.2008, 04:10   #1 (permalink)
hdi
Stammbenutzer
Viertel Gigabyte
 
Benutzerbild von hdi
 
Registriert seit: 17.01.2008
Fachbeiträge: 3.624
Abgegebene Danke: 43
Erhielt 203 Danke für 182 Beiträge
Standard Worst-Performance-Award für Arbeiten mit ListModel

Hallo...

ich hab grad ne Methode geschrieben, und ich kuck sie mir an und denke "oh mein gott "
Leider stell ich mich beim Arbeiten mit arrays usw immer sehr doof an, vllt geh ich auch das komplett
falsch an.

Hab ne JList, mit einem String[] model. Da man bei einem ListModel weder ein "add" noch "remove" hat, muss
ich mir das komplette Model immer neu machen, wenn ich etwas lösche oder adde.

Im Anhang meine grandiose Methode, die Elemente aus der Liste löscht. Wäre nett, wenn ihr mir da
ne bessere Version vorschlagt, ich stell mich bei sowas wie gesagt immer recht doof an, ich machs immer
unglaublich kompliziert, aber mir fehtl die Übung mit sowas. Bitteschön:

Code:
/* Neue Liste = alte Liste - selektierte Einträge */
			int[] selectedIndices = list.getSelectedIndices(); 
			int oldSize = list.getModel().getSize();
			int newSize = oldSize - selectedIndices.length;
			String[] newListModel = new String[newSize];
			int newIndex = 0;
			/* Liste kopieren bis auf selektierte Einträge */
			for (int i = 0; i < oldSize; i++) {
				/* Soll dieser Eintrag kopiert werden ? */
				boolean toCopy = true;
				for (int j : selectedIndices) {
					if (i == j) {
						// nicht kopieren, Element überspringen
						toCopy = false;
						break;
					}
				}
				if (toCopy) {
					// kopieren, es ist keines der selektierten Elemente:
					newListModel[newIndex] = (String) list.getModel()
							.getElementAt(i);
					newIndex++;
				}
			}
			/* Liste durch neue ersetzen und wieder an das ScrollPane hängen */
			list = new JList(newListModel);
			listPane.setViewportView(list);
Danke
__________________
Java Lernen leicht gemacht:
www.javavideokurs.de
Java Video Kurs - Java Video Tutorials - Online Java lernen!
hdi ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.12.2008, 04:55   #2 (permalink)
stev.glasow
Nicht angemeldet
 
Fachbeiträge: n/a
schau dir mal java.util an :P das ist zwar "Bauklötze bauen für Spielkinder" mit bissel overhead aber wenn juckt das hierbei. find's lustig bei sowas auf performance zu achten, den unterschied merkt man eh nicht.
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.12.2008, 05:02   #3 (permalink)
hdi
Stammbenutzer
Viertel Gigabyte
Themenstarter
 
Benutzerbild von hdi
 
Registriert seit: 17.01.2008
Fachbeiträge: 3.624
Abgegebene Danke: 43
Erhielt 203 Danke für 182 Beiträge
lol, beginnt jetz das Thread-übergreifende Stalking Ich hab auch nie gesagt, dass ich Bauklötze nich mag, sondern nur, dass es nun mal Fakt ist. Aber...hey... bitte, lassen Sie mich in Frieden, um Gottes Willen

edit: also ich bin etwas überfordert mit util. Was brauch ich hier? Ich hab n ListModel, dazu gibts nix in util, das einzige
was ich noch habe is ja ein Array. Aber irgendwie kann ich da keine Methode von brauchen.

Ich wollt's auch mit System.arraycopy machen, aber ich kann das ListModel nicht in ein Array casten. Sorry, dieser Tipp hilft mir grad irgendwie nicht weiter Ich brauch auch nich wirklich Methoden, die ne bessere Performance haben, auch wenn der Titel das sagt. Wär natürlich auch gut, aber vorallem sieht der code doch einfach total sch*** aus.
Diese Sache mit dem boolean dazwischen und so, ich weiss ja nicht.. Geht das nich kürzer?
__________________
Java Lernen leicht gemacht:
www.javavideokurs.de
Java Video Kurs - Java Video Tutorials - Online Java lernen!
hdi ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.12.2008, 05:26   #4 (permalink)
stev.glasow
Nicht angemeldet
 
Fachbeiträge: n/a
ich dachte jetzt so in der art:

Code:
List<Integer> selectedIndices = Arrays.asList(list.getSelectedIndices());
List<String> newListModel = new ArrayList<String>();
ListModel lmod = list.getModel();

for(int i = 0; oldSize.getSize(); ++i)
	if(!selectedIndices.contains(i)) 
		newListModel.add((String)lmod.getElementAt(i));

list = new JList(newListModel.toArray(new String[newListModel.size()]));
ist nicht getestet.

aber bau dir mal nen vernüftiges model - da die JList neu anzulegen verbraucht einiges mehr an ressourcen
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.12.2008, 05:41   #5 (permalink)
hdi
Stammbenutzer
Viertel Gigabyte
Themenstarter
 
Benutzerbild von hdi
 
Registriert seit: 17.01.2008
Fachbeiträge: 3.624
Abgegebene Danke: 43
Erhielt 203 Danke für 182 Beiträge
Code:
List<Integer> selectedIndices = Arrays.asList(list.getSelectedIndices());
geht leider nicht, weil er nicht von List<int[]> nach List<Integer> casten kann. Hab auch versucht
die for-schleife irgendwie anzupassen, krieg's aber so nich hin.

edit: Was meinst du mit "vernünftiges" Model? Wie sieht ein vernünftiges Model aus?
__________________
Java Lernen leicht gemacht:
www.javavideokurs.de
Java Video Kurs - Java Video Tutorials - Online Java lernen!
hdi ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.12.2008, 06:05   #6 (permalink)
stev.glasow
Nicht angemeldet
 
Fachbeiträge: n/a
Zitat: hdi
Code:
List<Integer> selectedIndices = Arrays.asList(list.getSelectedIndices());
geht leider nicht, weil er nicht von List<int[]> nach List<Integer> casten kann.
hättest jetzt auch einfach ne ArrayList<Integer> anlegen können und dann die werte selber eingefügt.

Zitat: hdi
Hab auch versucht die for-schleife irgendwie anzupassen, krieg's aber so nich hin.
Code:
int[] selectedIndices = list.getSelectedIndices();
// Arrays.sort(selectedIndices); [edit] kann raus
		
List<String> newListModel = new ArrayList<String>();
ListModel lmod = list.getModel();
	
int s = 0;
for(int i = 0; lmod.getSize(); ++i)
   if(s < selectedIndices.length && i == selectedIndices[s])
	   ++s;
   else	   
      newListModel.add((String)lmod.getElementAt(i));

list = new JList(newListModel.toArray(new String[newListModel.size()]));
Zitat: hdi
Was meinst du mit "vernünftiges" Model? Wie sieht ein vernünftiges Model aus?
das interface ListModel selber implementieren - dann kannst auch einfach bestimmte elemente aus dem model entfernen, etc. musst mal im forum oder mit google suchen.
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.12.2008, 10:59   #7 (permalink)
Java-Forum Team
Moderator
 
Registriert seit: 06.01.2007
Fachbeiträge: 16.993
Abgegebene Danke: 0
Erhielt 1.669 Danke für 1.512 Beiträge
Ähm - warum eigentlich das gewurste mit einem eigenen ListModel und vor allem dem erstellen einer neuen JList ? Was spricht gegen ein DefaultMutableListModel? Da hat man alles, was man braucht, und braucht auch keine neue JList zu erstellen (was IMHO ziemlich murksig ist....)
Marco13 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.12.2008, 18:22   #8 (permalink)
hdi
Stammbenutzer
Viertel Gigabyte
Themenstarter
 
Benutzerbild von hdi
 
Registriert seit: 17.01.2008
Fachbeiträge: 3.624
Abgegebene Danke: 43
Erhielt 203 Danke für 182 Beiträge
Du meinst DefaultListModel oder? Mutable gibts nicht, aber es ist veränderbar. Hab das jetz auch genutzt, und schwuppst sieht meine ganze Methode nun so aus:

Code:
			DefaultListModel listModel = (DefaultListModel) list.getModel();
			int i = 0;
			while ((i = list.getSelectedIndex()) != -1) {
				listModel.remove(i);
			}

Das is doch mal was Danke
__________________
Java Lernen leicht gemacht:
www.javavideokurs.de
Java Video Kurs - Java Video Tutorials - Online Java lernen!
hdi ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
ListModel dynamisch und schnell aber sicher ändern JuVman5KL Java Basics - Anfänger-Themen 7 19.01.2009 20:59
Synchronisation zwischen JList und ListModel hdi Java Basics - Anfänger-Themen 6 02.11.2008 06:37
JAX Innovation Award 2007 verliehen DP News 0 12.05.2007 14:35
Preise für JAVA STARS – SUN MICROSYSTEMS AWARD 2006 DP News 0 12.05.2007 14:21
ListSelectionModel und ListModel Martina AWT, Swing, JavaFX & SWT 6 09.11.2005 12:02


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:25 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de