JList Inhalt nach JButton Klick aktualisieren

Jigga

Bekanntes Mitglied
Hey Leute,

ich möchte folgendes realisieren. Ich hab eine JList mit BilderNamen in eine JScrollPane gelegt,wenn ich auf ein Element der Liste klicke öffnet sich ein bild im selben fenster neben der Liste.Die Bilder werden zuvor in eine ArrayList geladen und dann in einer Methode aus diesem ArrayList ausgelesen und zur JList hinzugefügt.Mit einem Button soll das Bild an einem bestimmten Pfad kopiert und das ursprüngliche bild gelöscht werden.
Das alles funktioniert auch bereits!
Die ArrayList wird gleich danach aktualiesiert,das funktioniert auch alles. Jedoch funktioniert folgendes nicht: nachdem die ArrayList aktualisiert wurde,will ich meine JList wieder wie zuvor gefüllt haben und dann fängts an zu hageln. Wenn ich dann versuche auf ein Element der JList zu klicken,kriege ich eine "IndexOutOfBoundExceptopn index -1". Ich verstehe einfach nicht warum mein index auf -1 gesetzt wird,habe das eigentlich ziehmlich genau so schon in einem anderen Programm realisiert und dort funktionierte das ganze wunderbar.Es war allerdings ein ButtonListener und kein MouseListener.

Java:
public class Mainframe {

	private static DefaultListModel listModel = new DefaultListModel();

	private static JList screenListe = new JList(listModel);

	private static JScrollPane screenListeScroll = new JScrollPane(screenListe);

	public static Container pane;
	
	public static JFrame mainFrame;

//mein gekürzter Frame,alle sachen,die nichts mit der JList zutun haben wurden hier entfernt!
	public static void mainScreen() {
		mainFrame = new JFrame();
		mainFrame.setTitle("HLR Ban Poster");
		mainFrame.setSize(900, 700);
		pane = mainFrame.getContentPane();
		pane.setLayout(new BorderLayout());

		JPanel pnlScreens = new JPanel();
		pnlScreens.setLayout(new GridLayout(1, 1));
		pnlScreens.setBorder(BorderFactory.createTitledBorder("Screenshots"));
		pnlScreens.add(screenListeScroll);

		
		pane.add(pnlScreens, BorderLayout.WEST);
		
		screenListeAnzeigen();

	//MouseListener der JList,der die angeklickten Bilder sichtbar macht!	
		screenListe.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent evt) {
				index = screenListe.getSelectedIndex();
				imageName = Settings.getScreenArray().get(index);
				pfad = Settings.pfad + "\\" + imageName;
				screen = Jimi.getImage(pfad);
				ImageIcon bild = new ImageIcon(screen);
				JLabel label = new JLabel(bild, JLabel.CENTER);
				JScrollPane sc = new JScrollPane(label);
				sc.setBorder(BorderFactory.createTitledBorder("Image"));
				pnlScreenStat.add(sc, BorderLayout.CENTER);
				mainFrame.setVisible(true);
			}
		});
//gekürzte ActionListener des erwähnten Buttons. "Settings.list();" aktuallisiert meine ArrayList.
	btnReport.addActionListener(new ActionListener() {	
			public void actionPerformed(ActionEvent reportEvent) {
					Settings.deletePic(imageName);
					Settings.list();
					screenListeAnzeigen();
					succesfull!");	
			}
		});
		
		mainFrame.setVisible(true);
		mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}
//screenListe ist meine JList. ScreenArray ist die zuvor erwähnte ArrayList.
	public static void screenListeAnzeigen() {
		screenListe.removeAll();
		listModel.removeAllElements();
		for (int i = 0; i < Settings.getScreenArray().size(); i++) {
			listModel.addElement(Settings.getScreenArray().get(i));
			screenListe.updateUI();
		}
		screenListe.updateUI();
	}

	public static void main(String[] args) {
	
}
 

eRaaaa

Top Contributor
Also was ich mich zu erst frage ist, wieso du nicht einfach nur removeElement o.ä. auf dem Model aufrufst, anstelle alle zu löschen und dann wieder alle hinzuzufügen?! (screenListe.removeAll(); hat übrigens nichts mit dem Model/Daten zu tun, das ist eine Methode aus Container updateUI afaik auch nicht :D)
Dann wäre ja interessant zu wissen wo die -1 her kommt. Wahrscheinlich aber von getSelectedIndex(), das liefert nämlich -1 zurück wenn nichts selektiert wurde. Du könntest es auch mal mit einem ListSelectionListener anstelle des MouseListeners versuchen
 

Jigga

Bekanntes Mitglied
Also was ich mich zu erst frage ist, wieso du nicht einfach nur removeElement o.ä. auf dem Model aufrufst, anstelle alle zu löschen und dann wieder alle hinzuzufügen?! (screenListe.removeAll(); hat übrigens nichts mit dem Model/Daten zu tun, das ist eine Methode aus Container updateUI afaik auch nicht :D)
Dann wäre ja interessant zu wissen wo die -1 her kommt. Wahrscheinlich aber von getSelectedIndex(), das liefert nämlich -1 zurück wenn nichts selektiert wurde. Du könntest es auch mal mit einem ListSelectionListener anstelle des MouseListeners versuchen

ich habe es nicht mit dem removeElement gemacht,weil ich mir damit arbeit ersparen wollte :D
weil ich dann ja auch aus der arraylist das element rauslöschen müsste.
und ja mit dem -1 hast du recht,wird vom selected index geliefert,wenn ich versuche ein element anzuklicken.Obwohl ein Element dann markiert ist nach dem Klick,kriege ich die -1 zurück.übrigens ist das JScrollPane in einem Label mit einem Layout,wenn das irgendwie wichtig ist.
also kann ich die mausklicks auch mit dem selection listener abfangen?
werde ich dann morgen sofort versuchen!
 

eRaaaa

Top Contributor
ich habe es nicht mit dem removeElement gemacht,weil ich mir damit arbeit ersparen wollte :D
weil ich dann ja auch aus der arraylist das element rauslöschen müsste.
welche Aufgabe die ArrayList in deinem Szenario hat verstehe ich sowieso nicht. Klingt für mich irgendwie doppelt gemoppelt,. Das DefaultListModel ist ja schon, wie der Name auch sagt, ja bereits dein Model und enthält die Daten, wieso willst du zusätzlich noch ein Model/Liste halten? Bzw wenn du unbedingt deine ArrayList verwenden willst(anstelle den Vector von dem Def.ListModel), dann implementiere doch dein eigenes AbstractListModel!

übrigens ist das JScrollPane in einem Label mit einem Layout,wenn das irgendwie wichtig ist.
???:L klingt krank ;> Kannst du vllt mal dein Problem in einem kleinen Minimalbeispiel welches man auch ausführen kann aufzeigen? Mit den Komponentenbaum den du verwendest?!
also kann ich die mausklicks auch mit dem selection listener abfangen?

steht in dem Link oben :bae:
 

Jigga

Bekanntes Mitglied
welche Aufgabe die ArrayList in deinem Szenario hat verstehe ich sowieso nicht. Klingt für mich irgendwie doppelt gemoppelt,. Das DefaultListModel ist ja schon, wie der Name auch sagt, ja bereits dein Model und enthält die Daten, wieso willst du zusätzlich noch ein Model/Liste halten? Bzw wenn du unbedingt deine ArrayList verwenden willst(anstelle den Vector von dem Def.ListModel), dann implementiere doch dein eigenes AbstractListModel!

hm ok ich weiß jetzt gerade selber nicht warum ich das gestern so gemacht hatte :D
ja war doppelt,habs gefixt und nur das listModel verwendet.anschließend habe ich einfach die markierten elemente rausgelöscht und fertig.sprich das thema hat sich erledigt :)
war wohl doch zu spät gestern :D

???:L klingt krank ;> Kannst du vllt mal dein Problem in einem kleinen Minimalbeispiel welches man auch ausführen kann aufzeigen? Mit den Komponentenbaum den du verwendest?!

wieso krank?mir wurde beigebracht mit panels zu arbeiten,die ich dann mit einem layout versehe und in mein pane lege ???:L
 

eRaaaa

Top Contributor
ja das klingt vernünftig. Hast du in deinem vorherigen Post evtl. Label mit Panel verwechselt? Naja wie auch immer, wenn es jetzt geht ist ja gut :)
 

Jigga

Bekanntes Mitglied
Ich habe gerade ein anderes Problem!
Irgendwie kriege ich mein Bild nicht mehr angezeigt mit dem ListSelectionListener.was mache ich da falsch?
hier der code zum Listener:
Java:
//Hierbei wird der index des selektierten Elements aus einer JList ausgelesen.Die Liste ist mit den
//Namen der Bilder gefüllt.Also hole ich mir den Namen und baue mir den Pfad zu dem bild (der zuvor
//schon bestimmt wurde!).Anschließend hole ich mir das bild,wie im Internet nachgelesen mit der
//"getImage" Methode und lege das ganze in ein ImageIcon.Dieses wird anschließend  in ein label
//geladen,das in einem JScrollPane liegt.Das Scrollpane liegt in einen anderen label,das ein
//BorderLayout besitzt.Dieses habe ich in das ContentPane gelegt.Jedoch sehe ich leider kein bild beim
//klick.
	private class ListListener implements ListSelectionListener {
	    public void valueChanged(ListSelectionEvent e) {
	    	if (e.getValueIsAdjusting())
	          	index = imageListe.getSelectedIndex();
		        imageName = listModel.get(index).toString();
		        pfad = Settings.pfad + "\\" + imageName;
	        	screen = Jimi.getImage(pfad);
	        	bild = new ImageIcon(screen);
	        	lblImage = new JLabel(bild);
	        	lblImage.updateUI();
	        } 
	    {
	    
	    }
	}
	public static void main(String[] args) {
		new Hauptfenster();

	}	
}

ja das klingt vernünftig. Hast du in deinem vorherigen Post evtl. Label mit Panel verwechselt? Naja wie auch immer, wenn es jetzt geht ist ja gut :)

Nein nicht das ich wüsste.Labels wurden bei uns als eine art "Flächentagfeln" für zB Text genutzt und Panels als eine Art Container in den man alles reinlegt usw.
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Naja so kann man da jetzt wenig zu sagen. Überprüfe halt ob der Pfad auch wirklich stimmt (z.B. mit new File(...).exists())
Bzw. was ist Settings.pfad ?
Und eben, vor deinem Edit hattest du auch etwas mit jar geschrieben, sind die Bilder mit im jar? Dann solltest du die Forensuche mal bemühen, wie man Bilder lädt findet man hier sehr häufig :)
 

Jigga

Bekanntes Mitglied
Naja so kann man da jetzt wenig zu sagen. Überprüfe halt ob der Pfad auch wirklich stimmt (z.B. mit new File(...).exists())
Bzw. was ist Settings.pfad ?
Und eben, vor deinem Edit hattest du auch etwas mit jar geschrieben, sind die Bilder mit im jar? Dann solltest du die Forensuche mal bemühen, wie man Bilder lädt findet man hier sehr häufig :)
also die bilder existieren und der pfad wird auch richtig ausgelesen.Mit "Settings.pfad" hole ich mir den pfad,der vorher definiert wurde.Irgendwie haperts am übergeben an das JLabel.
Das zum davor geschriebenen hat sich bereits erledigt :)


EDIT: Ok hab die funtkion "label.setIcon()" gefunden,hat sich somit erledigt :D
danke für die hilfe
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Inhalt/Wert aus einer JList ablesen Java Basics - Anfänger-Themen 5
N 2 spaltige JList, mit dynamischen Inhalt Java Basics - Anfänger-Themen 4
T Inhalt einer Datei in Jlist darstellen Java Basics - Anfänger-Themen 6
A Datei einlesen und Inhalt in verschidenen JList anzeige? Java Basics - Anfänger-Themen 3
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
U JList erstellen Java Basics - Anfänger-Themen 2
Soloeco JList/DefaultListModel: Wie kann ich ein Panel hinzufügen? Java Basics - Anfänger-Themen 1
J Objekt bei Auswahl in jList ändern Java Basics - Anfänger-Themen 6
D JList ListSelectionEvent entfernen? Java Basics - Anfänger-Themen 13
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
S Export aus JList Java Basics - Anfänger-Themen 6
M Erste Schritte JList einträge Java Basics - Anfänger-Themen 1
M Erste Schritte Doppelte Ausgabe? (JList) Java Basics - Anfänger-Themen 1
M Erste Schritte Auswahl in einer JList Java Basics - Anfänger-Themen 2
P JList, aus selectedValue bestimmten Wert aus Containerklasse auslesen Java Basics - Anfänger-Themen 4
N JList + DefaultListModel + JScrollPane --> ensureIndexIsVisible funktioniert nicht immer Java Basics - Anfänger-Themen 1
C JList Einträge nach Datum sortieren Java Basics - Anfänger-Themen 3
J Element zu jList hinzufügen NullPointerExcepetion Java Basics - Anfänger-Themen 2
S jList --> Array einfügen und Liste löschen Java Basics - Anfänger-Themen 5
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
I in listFiles() oder JList Dateiendungen entfernen Java Basics - Anfänger-Themen 14
N Erste Schritte MySQL Tabelle in JList darstellen Java Basics - Anfänger-Themen 1
O JList aktualisieren während Dateieinlesung Java Basics - Anfänger-Themen 4
B JFileChooser und JList Java Basics - Anfänger-Themen 7
OnDemand Enumeration <> JList Java Basics - Anfänger-Themen 5
P Mehrfachauswahl in einer JList Java Basics - Anfänger-Themen 2
A JList Elemente in ein andres JList Adden Java Basics - Anfänger-Themen 5
C .txt und Jlist Java Basics - Anfänger-Themen 10
J Daten in eine JList einfügen Java Basics - Anfänger-Themen 6
A JList / toString modify Java Basics - Anfänger-Themen 2
K jlist an text anpassen Java Basics - Anfänger-Themen 3
D Erste Schritte JList + Checkbox Java Basics - Anfänger-Themen 5
I kein zugriff auf jList oder Textfield Java Basics - Anfänger-Themen 2
A JList bearbeiten Java Basics - Anfänger-Themen 2
M Index einer JList ausgeben Java Basics - Anfänger-Themen 4
J Markierte Einträge (Dateien) in JList sollen in einen anderen Ordner verschoben werden. Java Basics - Anfänger-Themen 12
J Markierte Items in einer JLIST in einen Ordner verschieben Java Basics - Anfänger-Themen 2
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
S ListModel - Anzeige im JList Java Basics - Anfänger-Themen 4
H JList Java Basics - Anfänger-Themen 2
G JList Objekte richtig anzeigen in JDK 6 Java Basics - Anfänger-Themen 5
U JList Java Basics - Anfänger-Themen 6
L HashMap zu JList Java Basics - Anfänger-Themen 6
C Input/Output Inhalte von ArrayList und JList in Datei schreiben Java Basics - Anfänger-Themen 5
M Jlist Elemente hinzufügen Java Basics - Anfänger-Themen 2
F Koordinaten JList darstellen Java Basics - Anfänger-Themen 4
M BeanBinding Jlist an Jlabel Java Basics - Anfänger-Themen 2
M GUI JList - Objekte listen u. Feld anzeigen? Java Basics - Anfänger-Themen 16
E JList GUI aktualisieren? Java Basics - Anfänger-Themen 3
JAVAnnik JList Auswahl Java Basics - Anfänger-Themen 2
Z In JList per Doppelklick eine Datei öffnen (z.B. ein PDF) Java Basics - Anfänger-Themen 16
P Jlist + Popupmenu Java Basics - Anfänger-Themen 10
M Properties Eintrag löschen, welcher in der JList "ausgewählt" wurde Java Basics - Anfänger-Themen 2
c_sidi90 File Array an Jlist übergeben Java Basics - Anfänger-Themen 11
B JList und JTable: leere Zeilen bei listfiles(); Java Basics - Anfänger-Themen 5
N DefaultListModel auf JList sortieren Java Basics - Anfänger-Themen 7
A JList mit Überschrift Java Basics - Anfänger-Themen 2
K Scrollbalken in JList funktioniert nicht Java Basics - Anfänger-Themen 9
B JList wird nicht aktualisiert bzw hat keine Items Java Basics - Anfänger-Themen 2
D JList nicht sichtbar Java Basics - Anfänger-Themen 4
B JList mit Scrollbar? Java Basics - Anfänger-Themen 7
K Datenbindung an JTable, JList, Primärschlüssel verstecken Java Basics - Anfänger-Themen 4
M JList Event Java Basics - Anfänger-Themen 5
M JList Index selektieren ausschalten. Java Basics - Anfänger-Themen 7
M ArrayList<int[]> - Problem mit JList! Java Basics - Anfänger-Themen 27
M JList + ListModel Java Basics - Anfänger-Themen 26
L JList Aktualisieren funktioniert nur Zufällig Java Basics - Anfänger-Themen 3
T JList aktualisieren Java Basics - Anfänger-Themen 12
T alle Ordner in einem Ordner in JList anzeigen Java Basics - Anfänger-Themen 3
R .Jpg anzeigen lassen nach klick in JList Java Basics - Anfänger-Themen 11
F Hilfe! JList Inhalte vertauschen Java Basics - Anfänger-Themen 2
A Eintrag einer JLIST speichern Java Basics - Anfänger-Themen 3
A Anordnung von JList Elementen Java Basics - Anfänger-Themen 3
B JList wird nach Ändern weiß Java Basics - Anfänger-Themen 11
B Einträge im JList einfügen Java Basics - Anfänger-Themen 9
S JList mit icons UND strings für Dialogbox Java Basics - Anfänger-Themen 2
hdi Fehler beim Model-Update einer JList (DefaultListModel) Java Basics - Anfänger-Themen 3
DStrohma Index einer markierten Zeile aus einer JList bekommen? Java Basics - Anfänger-Themen 5
P JList in JPanel anzeigen Java Basics - Anfänger-Themen 2
hdi Synchronisation zwischen JList und ListModel Java Basics - Anfänger-Themen 6
D Suche in JList nach dem ersten Buchstaben Java Basics - Anfänger-Themen 2
hdi JList mit Model und Observer -> Chaos, blicke nicht durch Java Basics - Anfänger-Themen 22
1 JList Problem : Synchronisation mit Vector klappt nicht :( Java Basics - Anfänger-Themen 6
G Elemente aus jList entferne. Java Basics - Anfänger-Themen 2
G JList updaten Java Basics - Anfänger-Themen 7
K jList scrollPane Java Basics - Anfänger-Themen 2
7 Java Swing: Wie JScrollPane zur JList hinzufügen? Java Basics - Anfänger-Themen 12
K JList verschiebt sich Java Basics - Anfänger-Themen 7
G String in JList Java Basics - Anfänger-Themen 11
T Jlist Object hinzufügen Java Basics - Anfänger-Themen 2
B Auslesen der JList Java Basics - Anfänger-Themen 11
S jList Multiple Selection mit Klick Java Basics - Anfänger-Themen 2
M Dateien in einem Ordner, JList Java Basics - Anfänger-Themen 7
G JList größe verändert sich Java Basics - Anfänger-Themen 2
M JList Parameter verschieben Java Basics - Anfänger-Themen 3
C jList - Zeile Markieren - jList.setSelectedIndex(wert); Java Basics - Anfänger-Themen 3
G JList mit LinkedList füllen Java Basics - Anfänger-Themen 2
G JList Mehrfachselektion Java Basics - Anfänger-Themen 6
P JList mit setListData(<Vector>) Java Basics - Anfänger-Themen 7
J GUI mit JList Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben