JList update über tabbedPane?

Status
Nicht offen für weitere Antworten.

chucknorris

Mitglied
Moin,

Folgende Konstruktion:

Tab1:
Hier sind Formularfelder (JTextfield), mit denen Daten in eine MySQL-Datenbank gespeichert werden.​

Tab2:
Hier ist eine JList, die die bereits gespeicherten Daten anzeigt.​

Problem:
Wenn ich in Tab1 Daten eingebe und gleich danach (noch zur Laufzeit) auf Tab2 wechsle, dann zeigt die JList den neuen Eintrag NICHT an. Ich muss dazu das ganze Programm neu starten, damit es wirksam wird.​

Wie kann ich es bewirken, dass die JList zur Laufzeit die Daten refresht?

ich habe schon einiges probiert:

- revalidate()
- repaint()
- tabbedPane.changelistener()

nichts funktioniert. Irgendwelche Ideen?

So sieht meine JList aus:

Java:
final DefaultListModel listModel = new DefaultListModel();
		ConnectMySQL db = ConnectMySQL.getInstance();
		ResultSet rs = db.query("SELECT * FROM Tab ORDER BY 'ID'");
		         while (rs.next()) { 
		        	 listModel.addElement( rs.getString("id") + ": " + rs.getString("name") );
		         }
		final JList WaehlerListe = new JList(listModel);

Die Liste bekommt ihre Daten durch eine MySQL-Abfrage.
Wenn ich in Tab1 etwas speichere muss irgendwas passieren, damit hier aktuelle Daten erscheinen, nur weiss ich nicht was und wie...Ich glaube das ganze hängt auch irgendwie mit der JTabbedPane zusammen...Könnte man das ganze evtl. auch mit einem Pattern lösen?

Edit: Die JList (verknüpft mit einem JScrollPane) liegt auf einem separaten JPanel. Ich meine gehört zu haben, dass es auch damit Probleme gibt

Ich würde es sehr zu schätzen wissen, wenn da draussen jemand ist, der mir bei dem blöden Problem die Lösung aufzeigt.

Gruß
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Entweder Du gibst die Daten beim Speichern an das ListModel weiter oder Du führst nach dem Speichern nochmal das Statement aus und befüllst das Model neu.
 

chucknorris

Mitglied
Die Daten müssen auf jedenfall erstmal direkt in die MySQL-DB. Das Statement neu ausführen hatte ich auch schon überlegt.

Wie kann ich das realisieren? Die Aktualisierung würde in einer anderen Klasse stattfinden müssen (Aktion in Tab1, aber Änderung in Tab2). Stehe gerade auf dem Schlauch.

Gruß
 
S

SlaterB

Gast
kommt drauf an, wie allgemein oder wie individuell du das alles verknüpfen möchtest,

irgendjemand wird doch sicher Tab1 und Tab2 erzeugen,
an dieser Stelle könntest du Tab1 (oder nur einem Listener darin oder einer sonstigen Kontroll-Klasse)
eine Referenz auf Tab2 geben (oder wieder nur das Model oder was auch immer)

wenn Tab1 seine Aktion ausführt, kann Tab1 auch
tab2.aktualisiereDich();
aufrufen, sofern eine entsprechende Methode da ist,

----

im Grunde ähnlich aber doch bisschen anders:
tab1 spricht nicht mit Tab2, sondern mit einer allgemeinen Kontrollklasse, die alle Tabs kennt (!) (bzw. nur deren Models),
controll.ichHabDaWasEingefügt();
und mehr muss Tab1 gar nicht machen/ wissen,
die Kontrollklasse entscheidet 'Tab1 sagt mir, dass es was eingefügt hat, nun gut, dann halte ich es für richtig, Tab2 zur Aktualisierung zu ermuntern',
 
S

SlaterB

Gast
nein, nicht unbedingt,
an der Stelle, an der die Daten in die DB geschrieben werden,
kann direkt entweder der Befehl andererTab.tueWas() aufgerufen werden oder irgendwelche indirekte Befehle a la
controller.tueWasInAnderemTab()

Observer wäre auch denkbar, wenn Tab sonst niemanden kennt und nur seine Observer informieren möchte
 

chucknorris

Mitglied
Ich hab jetzt in Tab2 drin:

Java:
static void refresh() {
		db = ConnectMySQL.getInstance();
		rs = db.query("SELECT * FROM Tabelle ORDER BY 'ID'");       
        }

und in Tab1 (beim drücken eines Buttons; ActionEvent):

Java:
Tab2.refresh();

leider ändert sich nichts in der Liste?

Gruß
 
S

SlaterB

Gast
ein ResultSet hat keine Auswirkungen auf irgendeine Anzeige,
oder wird das ResultSet in einem Model verwendet oder ähnliches?

das wäre erstens schlecht und zweitens fehlt dann dann ein Befehl wie fireContentsChanged() aus AbstractListModel,

wie sieht denn der Code für die bisher normal funktionierende Aktualisierung der JList aus?

edit:
ach, weiter oben hast du ja
> while (rs.next()) {
> listModel.addElement( rs.getString("id") + ": " + rs.getString("name") );
> }

usw., sowas wird nicht unbedingt automatisch wieder ausgeführt..
 

chucknorris

Mitglied
Noch sieht die JList wie oben aus.

Ich bin davon ausgegangen, dass die Update-SQL-Abfrage die Aktualisierung automatisch vornimmt. Leider daneben.

Die Aktualisierung soll ja durch einen Button geschehen im anderen Tab.
Ich müsste also einmal alle Einträge löschen und wieder hinzufügen in einer Schleife.

Irgendwie so?:

Java:
listModel = list.getModel();
	        ((DefaultListModel) listModel).clear();
for (...) {
((DefaultListModel) listModel).addElement(((???));
}

Was meint ihr?
 
S

SlaterB

Gast
zunächstmal lege eine Variable vom Typ DefaultListModel an und caste EINMAL,
statt bei JEDEM Zugriff neu zu casten

ansonsten könnte es funktionieren, ja
 

chucknorris

Mitglied
Irgendwas stimmt nicht:

Die Liste:
Java:
final DefaultListModel listModel = new DefaultListModel();
        
		db = ConnectMySQL.getInstance();
		rs = db.query("SELECT * FROM tabelle ORDER BY 'ID'");
		         while (rs.next()) { 
		        	 listModel.addElement( rs.getString("id") + ": " + rs.getString("name") );
		         }
		final JList WaehlerListe = new JList(listModel);

die Update-Funktion:
Java:
 public static void updateList(JList list) throws SQLException {	
	     listModel = (DefaultListModel) list.getModel();  
		 listModel.clear();
	        
	        db = ConnectMySQL.getInstance();
			rs = db.query("SELECT * FROM tabelle ORDER BY 'ID'");
			         while (rs.next()) { 
			        	 listModel.addElement( rs.getString("id") + ": " + rs.getString("name") );
			        	 PANEL.repaint();
			        	 PANEL_b.repaint();
			        	 scrollpane.repaint();

	    }

Fehlermeldung:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at...


Diese Zeile scheint nicht zu stimmen:
Java:
listModel = (DefaultListModel) list.getModel();
 
S

SlaterB

Gast
anscheinend ist list null, wer ruft updateList(JList list) auf, wo wurde list gespeichert usw.,
viel Code hilft in diesem Fall wohl viel,
 

chucknorris

Mitglied
Tab1 ruft die Methode auf:

Java:
Tab2.updateList(WaehlerListe);

WaehlerListe ist dieses Konstrukt:

Java:
final DefaultListModel listModel = new DefaultListModel();
		db = ConnectMySQL.getInstance();
		rs = db.query("SELECT * FROM Tabelle ORDER BY 'ID'");
		         while (rs.next()) { 
		        	 listModel.addElement( rs.getString("id") + ": " + rs.getString("name") );
		         }

		final JList WaehlerListe = new JList(listModel);

Die Update-Methode, die JList (list ist nur Übergabe-Parameter) liegen im Tab2. So ziemlich alles liegt im Tab2.

Gruß
 
S

SlaterB

Gast
und trotzdem kennt Tab1 WaehlerListe?
schwer zu glauben, wieso lautet die Methode nicht updateList(); ohne Parameter?

man kann doch wohl erwarten, dass Tab1 seine eigene JList selber kennt/ irgendwo herbekommt

----

unabhängig davon stellt sich immer noch die Frage, ob WaehlerListe vor dem Aufruf null ist (testen! System.out.println!)
woher diese Variable kommt usw.
 

chucknorris

Mitglied
Totaler denkfehler meinerseits. Sorry.

Also in Tab1 wird jetzt die Methode Tab2.update() aufgerufen. Ohne parameter.
Scheint zu funzen!

Java:
	 public static void updateList() throws SQLException {	
	     listModel = (DefaultListModel)WaehlerListe.getModel();  
		 listModel.clear();
		 
	        db = ConnectMySQL.getInstance();
			rs = db.query("SELECT * FROM tabelle ORDER BY 'ID'");
			         while (rs.next()) { 			    
			        	 listModel.addElement( rs.getString("id") + ": " + rs.getString("name") );
			        	 
			        	 WaehlerListe.setModel(listModel);
			        	 PANEL.repaint();
			        	 PANEL_b.repaint();

	        }

	    }

In der Update-Methode spreche ich jetzt WaehlerListe direkt an.

Gruß
 
S

SlaterB

Gast
wo und wann tritt die Exception auf, was hat WaehlerListe.getSelectedIndex() mit dem update zu tun?
oder tritt das bei einer anderen Aktion auf?

> WaehlerListe.clearSelection();
> Aber es wird immer an der getID gemeckert.

wie jetzt?, nach clearSelection() wird ja wohl getSelectedIndex() -1 sein, also kein Wunder,
vor clearSelection() wird irgendwas selektiert sein oder nicht, aber was hat clearSelection() damit zu tun?

> erledigt.

puh
 

chucknorris

Mitglied
Die Exception war bzw. ist eine andere Aktion:

In der JList wähle ich einen Nachnamen aus und danach füllt mir das Programm Textfelder mit allen Informationen (ChangeListener).

Da ich in die Liste als erstes IDs einlese, hole ich diese mit getSelectedValue raus. Funktioniert auch so.

Stehen dann zwar immer Zahlen in der JList, aber ist nicht schlimm.

Gruß
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Q JList Update Problem AWT, Swing, JavaFX & SWT 1
S Probleme mit dem Update einer JList AWT, Swing, JavaFX & SWT 7
B Jlist füllen AWT, Swing, JavaFX & SWT 4
H JList.setEnabled(false) - Text soll nicht grau sein AWT, Swing, JavaFX & SWT 2
BananenBrötchen Swing Arraylist in jList anzeigen AWT, Swing, JavaFX & SWT 6
J Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
A Swing JList zu JTree AWT, Swing, JavaFX & SWT 11
G Eingabe in JTextField in Array speichern und in JList ausgeben AWT, Swing, JavaFX & SWT 7
cezary Choice, JComboBox oder JList AWT, Swing, JavaFX & SWT 5
J JList scrollen AWT, Swing, JavaFX & SWT 3
Neumi5694 Swing JList - Klick abfangen AWT, Swing, JavaFX & SWT 3
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
M Swing JList Auswahl-GUI-Konzept AWT, Swing, JavaFX & SWT 9
C JList: Bestimmte Objekte ausschließen AWT, Swing, JavaFX & SWT 1
F JList aktualisiert nicht AWT, Swing, JavaFX & SWT 24
F JList auffüllen aus Array von Instanzen AWT, Swing, JavaFX & SWT 4
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
F JList bei Windowbuilder AWT, Swing, JavaFX & SWT 8
F JList zeigt keine Einträge mehr AWT, Swing, JavaFX & SWT 1
P JList erstellen AWT, Swing, JavaFX & SWT 4
G DefaultListModel für JList AWT, Swing, JavaFX & SWT 2
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5
P Übergeben von ListModel an nichtparametrisierte JList AWT, Swing, JavaFX & SWT 8
M Ein Element in mehreren JList selektieren AWT, Swing, JavaFX & SWT 5
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
Nabbit Über JList kein JPopupMenu AWT, Swing, JavaFX & SWT 2
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
C Swing JList zeigt keine neuen Einträge an AWT, Swing, JavaFX & SWT 1
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
T Swing WindowBuilder: JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
C Button Text in JList neue Zeile AWT, Swing, JavaFX & SWT 6
C Hilfe bei JSpinner und JList AWT, Swing, JavaFX & SWT 1
D Swing ArrayList in Jlist/ List oder Array in JList/List AWT, Swing, JavaFX & SWT 5
S JList ist leer, aber DefaultListModel hat die Daten? AWT, Swing, JavaFX & SWT 9
M JList wird angezeigt, JTable (DefaultTableModel) nicht AWT, Swing, JavaFX & SWT 7
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
D Swing Jlist Größe während der Laufzeit verändern. AWT, Swing, JavaFX & SWT 11
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
N AWT Markierte Zeile jList aus mySQL DB löschen AWT, Swing, JavaFX & SWT 2
S JList repaint AWT, Swing, JavaFX & SWT 1
F Swing JTextField in JList (Funktion beibehalten) AWT, Swing, JavaFX & SWT 2
H JList AWT, Swing, JavaFX & SWT 5
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
B Swing Dynamische JList mit Bildern AWT, Swing, JavaFX & SWT 4
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
S JList Index finden AWT, Swing, JavaFX & SWT 6
3 Swing JList-Inhalt als verschlüsselte Datei schreiben und lesen AWT, Swing, JavaFX & SWT 1
N JComponenten in JList oder doch anders? AWT, Swing, JavaFX & SWT 0
S Swing JList, ArrayList + DefaultModel AWT, Swing, JavaFX & SWT 5
B Tabelleneinträge in JList anzeigen AWT, Swing, JavaFX & SWT 5
P JList/JScroolPane Text verschieben und text wrappen AWT, Swing, JavaFX & SWT 3
D Swing JList keine Selektionsänderung bei "dragged-Maus" AWT, Swing, JavaFX & SWT 4
M JList Model filtern AWT, Swing, JavaFX & SWT 4
K Swing JList - Element richtig hinzufügen AWT, Swing, JavaFX & SWT 4
T Swing Elemente der JList überlappend darstellen AWT, Swing, JavaFX & SWT 5
P Swing JList mit Objekten - Name anzeigen AWT, Swing, JavaFX & SWT 5
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
K Mehrfachselektierungen in einer JList AWT, Swing, JavaFX & SWT 6
L Swing Component alignment innerhalb einer JList AWT, Swing, JavaFX & SWT 3
M Swing JList Listener AWT, Swing, JavaFX & SWT 20
M Accelerator zu JMenuItem des JPopupMenu einer JList AWT, Swing, JavaFX & SWT 2
S Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Element aus JList eines JFileChooser entfernen AWT, Swing, JavaFX & SWT 3
E selektierter Datensatz in JList als String Datentyp AWT, Swing, JavaFX & SWT 23
E selektiertes Element aus JList zurückgeben AWT, Swing, JavaFX & SWT 7
E JList /DefaultListModel mit Datenbank verbinden AWT, Swing, JavaFX & SWT 10
L SQL & Jtable o. JList AWT, Swing, JavaFX & SWT 5
K Swing JList und veränderte CellRenderer AWT, Swing, JavaFX & SWT 8
B JList + ListCellRenderer AWT, Swing, JavaFX & SWT 5
B JList -> Disabled AWT, Swing, JavaFX & SWT 6
J JList, Anzeige aktualisieren AWT, Swing, JavaFX & SWT 7
I Jlist isselectionEmpty AWT, Swing, JavaFX & SWT 4
I Jlist dynamisch aus Datenbank füllen AWT, Swing, JavaFX & SWT 14
R Swing unbegrenzte Anzahl vonEinträgen in JList AWT, Swing, JavaFX & SWT 2
MiMa Dateien aus Ordner in einer JList Ausgeben AWT, Swing, JavaFX & SWT 32
P Elemente einer JList ausgeben AWT, Swing, JavaFX & SWT 11
M JList mit 2-zeiligen Objekten füllen AWT, Swing, JavaFX & SWT 7
S JList mit Einträgen versehen schlägt fehl AWT, Swing, JavaFX & SWT 4
F Swing ArrayList in JList anzeigen und Objekte auswählen AWT, Swing, JavaFX & SWT 2
B JList zeigt Elemente nicht an AWT, Swing, JavaFX & SWT 3
S Fragen zu JList AWT, Swing, JavaFX & SWT 3
B Aktualisierung einer JList AWT, Swing, JavaFX & SWT 5
W JList valueChanges weiterleiten? AWT, Swing, JavaFX & SWT 14
D JButton-Click in JList mit Panels (auf dem der Button ist) AWT, Swing, JavaFX & SWT 6
E Jlist nur mit Klasse? AWT, Swing, JavaFX & SWT 5
D Swing JList <-> AdapterModel <-> Model AWT, Swing, JavaFX & SWT 4
1 JList - Elemente mit rechter Maustaste wählen AWT, Swing, JavaFX & SWT 6
M JList mit DefaultListModel und listener AWT, Swing, JavaFX & SWT 4
B JList nach dem Rendern sortieren AWT, Swing, JavaFX & SWT 3
T Wie ist das "Lookup-Verhalten" von JList, JCombobox änderbar? AWT, Swing, JavaFX & SWT 4
D JList items voneinander trennen AWT, Swing, JavaFX & SWT 10
E Keine Ausgabe von JList bei drücken von Button auf die Konsole AWT, Swing, JavaFX & SWT 7
M gleiches Element in JList mehrmals hintereinander auswählen AWT, Swing, JavaFX & SWT 6
T JList und Objekte AWT, Swing, JavaFX & SWT 7
M Swing JList Item in andere JList während Ausführung AWT, Swing, JavaFX & SWT 4
V JList filtern AWT, Swing, JavaFX & SWT 6
GianaSisters jList nur einmal ein Element anklicken AWT, Swing, JavaFX & SWT 3
TheWhiteShadow JList-Inhalt nach Änderung weg AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben