jdesktop binding: jTable update nach Änderung...

markusk21

Mitglied
Hallo zusammen,
ich habe in Netbeans eine JTable an ein Liste gebunden:
Java:
java.util.List<data.admin.Disziplin> wettkampfListe = session.createQuery("from data.admin.Disziplin").list();

Netbeans hat folgenden Code zum Binding erstellt:
Java:
        org.jdesktop.beansbinding.ELProperty eLProperty = org.jdesktop.beansbinding.ELProperty.create("${wettkampfListe}");
        org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, eLProperty, jTable1);
        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${disziplinId}"));
        columnBinding.setColumnName("Disziplin Id");
        columnBinding.setColumnClass(Integer.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${wettkampfBezeichnung}"));
        columnBinding.setColumnName("Wettkampf Bezeichnung");
        columnBinding.setColumnClass(String.class);
 /* 
Noch einige andere Spalten...
*
*/
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${gewertet}"));
        columnBinding.setColumnName("Gewertet");
        columnBinding.setColumnClass(Boolean.class);
        bindingGroup.addBinding(jTableBinding);
        jTableBinding.bind();org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${wettkampf}"), jTable1, org.jdesktop.beansbinding.BeanProperty.create("selectedElement"));
        bindingGroup.addBinding(binding);
Die Tabelle ist edierbar und ich füge auch neue Datensätze hinzu.
Das Problem entsteht, wenn ich nach der Änderung (und Speicherung in der Datenbank) einen Datensatz hinzufüge. Dann kommt nämlich:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException: Can not call this method on a managed binding

Die komplette Meldung kommt unten.
Bei einer Änderung in der Tabelle reagiert :
Java:
    private void tableChange(javax.swing.event.TableModelEvent e) {
	// Zeilen von der ersten bis zur letzten Änderungsreihe werden gespeichert.
	if (this.bound) { // Wenn zum Neueinlesen der Daten die bindung unterbrochen wird, werden keine Änderungen gespeichert.
	    for (int i = e.getFirstRow(); i <= e.getLastRow(); i++) {
		logger.debug("TableChange! Disziplin " + i + " wird auf Vollständigkeit geprüft.");
		if ((this.wettkampfListe.get(i).getWettkampfBezeichnung().length()>=1)){
		    this.updateDisziplin(wettkampfListe.get(i));
		}
	    }
	}
    }
und ruft
Java:
    private void updateDisziplin(data.admin.Disziplin disziplin){
	logger.debug("Geänderte Disziplin \"" + disziplin.getWettkampfBezeichnung() + "\" wird gespeichert.");
	org.hibernate.Transaction tx = session.beginTransaction();
	session.update(disziplin);
	tx.commit();
    }

Ich schätze mal, hier bleibt das JTableBinding im Zustand "managed".

Wenn ich danach einen Datensatz hinzufüge wird diese Methode aufgerufen:
Java:
    private void saveDisziplin(data.admin.Disziplin disziplin){
	logger.debug("Neue Disziplin \"" + disziplin.getWettkampfBezeichnung() + "\" wird gespeichert.");
	org.hibernate.Transaction tx = session.beginTransaction();
	session.save(disziplin);
	tx.commit();
	initWettkampfListe();

	this.bound = false;
	// TODO disziplin hinzufügen verursacht beim Speichern Fehler! Wenn vorher ein Datensatz geändert wurde...
	logger.debug("Unbind...");
	bindingGroup.unbind();
	logger.debug("rebind...");
	bindingGroup.bind();
	logger.debug("Erfolgreich!");
	this.bound = true;

    }

Ich habe keine Bessere Lösung als den neuen Datensatz in der Datenbank zu speichern, die Liste neu zu laden (initWettkampfListe()) und danach die bindingGroup neu zu verbinden, damit die neuen Daten in der Tabelle angezeigt werden.

Vielleicht ist auch das der falsche Ansatz - hab es durch try-and-error raus bekommen...

Also, die Frage(n) lautet (lauten):
Wie füge ich einer gebundenen JTable einen Datensatz hinzu,
speziell, wenn vorher ein anderer Datensatz geändert wurde und ein Teil der Bindung im Zustand managed verbleibt.
Oder wie bekomme ich den Zustand der bindung auf den Status not managed?

Die Komplette Fehlermeldung:
Code:
DEBUG [AWT-EventQueue-0] (DisziplinenFrame.java:77) - Neue Disziplin "wdz" wird gespeichert.
DEBUG [AWT-EventQueue-0] (DisziplinenFrame.java:85) - Unbind...
Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException: Can not call this method on a managed binding
DEBUG [AWT-EventQueue-0] (DisziplinenFrame.java:87) - rebind...
        at org.jdesktop.beansbinding.Binding.throwIfManaged(Binding.java:1337)
        at org.jdesktop.beansbinding.Binding.bind(Binding.java:943)
        at org.jdesktop.beansbinding.BindingGroup.bind(BindingGroup.java:143)
        at gui.admin.DisziplinenFrame.saveDisziplin(DisziplinenFrame.java:88)
        at gui.admin.DisziplinenFrame.access$200(DisziplinenFrame.java:19)
        at gui.admin.DisziplinenFrame$2.actionPerformed(DisziplinenFrame.java:60)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6263)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2475)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Das verursachende binding hab ich auch gefunden:
Code:
ERROR [AWT-EventQueue-0] (DisziplinenFrame.java:94) - org.jdesktop.swingbinding.JTableBinding$ColumnBinding [name=null, sourceObject=null, sourceProperty=org.jdesktop.beansbinding.ELProperty[ValueExpression[${intern}]], targetObject=null, targetProperty=org.jdesktop.swingbinding.JTableBinding$ColumnProperty@396ab2e8, validator=null, converter=null, sourceNullValue=null, targetNullValue=null, sourceUnreadableValueSet=false, sourceUnreadableValue=null, bound=false]: Bound (false), Managed: (true)
ERROR [AWT-EventQueue-0] (DisziplinenFrame.java:97) - Managed Binding:
ERROR [AWT-EventQueue-0] (DisziplinenFrame.java:98) - Source: null: org.jdesktop.beansbinding.ELProperty[ValueExpression[${intern}]]
ERROR [AWT-EventQueue-0] (DisziplinenFrame.java:99) - Target: null: org.jdesktop.swingbinding.JTableBinding$ColumnProperty@396ab2e8
ERROR [AWT-EventQueue-0] (DisziplinenFrame.java:100) -
 
Zuletzt bearbeitet:

markusk21

Mitglied
Hat niemand eine Idee?
Gehe ich das ganze falsch an?
Ich brauche eine JTable, die die Daten einer Hibernate-Abfage darstellt und in der diese Daten geändert und sofort gespeichert werden.
Datensätze löschen und hinzufügen soll natürlich auch möglich sein.
 

markusk21

Mitglied
Niemand?
Ich komm immer noch nicht weiter...

Ich gehe auch alternative Wege - Tabelle kommt mir halt am praktischsten vor:
Ich habe aus einer Hibernate-Abfrage eine java.util.List mit Datensätzen (oder auch nicht, bei Neustart). Die Datensätze sollen möglichst in der Anzeige gleich ediert werden, oder auch gelöscht und hinzugefügt werden.

Einen Umweg über eine Extra-Eingabemaske würde ich gern vermeiden.

Gruß
Markus
 

markusk21

Mitglied
Also, ich hab es gelöst - indem ich das Binding rausgeschmissen hab und alles von Hand gebaut hab:

Ein eigenes Tablemodel für jede Tabelle - Änderungen werden gleich in die Datenbank gespeichert.
Ist nur etwas blöd für jede Tabelle, wenn nur eine Spalte anders ist, ein eigenes Modell zu programmieren.
Vielleicht finde ich da auch noch ne Lösung...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Play 1.2.5 Manuelles Binding Allgemeine Java-Themen 3
G Datentypen JGoodies Binding und JSpinner mit Integer Allgemeine Java-Themen 2
G JGoodies Binding oder EventBus verwenden? Allgemeine Java-Themen 11
C Java Native binding Code will nicht so ganz Allgemeine Java-Themen 2
KeTho1712 Java Swing: JTable standardmäßig füllen, sodass bei Start bereits Datensätze gespeichert sind Allgemeine Java-Themen 1
H Swing JTextArea als TableCellRenderer in JTable - wie Zeilen selektieren? Allgemeine Java-Themen 47
D JTable mit JTextAreas in den Zellen Allgemeine Java-Themen 8
X Swing JTable zeigt nichts Allgemeine Java-Themen 4
G jTable aktualisieren?! Allgemeine Java-Themen 1
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
A Fehler beim Aktualisieren JTable Allgemeine Java-Themen 1
D falsche Zeile aus JTable in MySQL gelöscht Allgemeine Java-Themen 6
offi Drag and Drop mehrerer File aus Explorer in JTable Allgemeine Java-Themen 1
V JTable Externe Lib Allgemeine Java-Themen 2
F JTable Pfeiltasten-Verhalten Allgemeine Java-Themen 1
T jTable Gestaffelte Überschriften Allgemeine Java-Themen 22
Paul15 2D Arraylist in Jtable Allgemeine Java-Themen 1
R jTable, nur Werte zwischen 2 Double values ausgeben Allgemeine Java-Themen 3
B Klassen JTable mit einer Liste Allgemeine Java-Themen 0
A JTable Bilder Allgemeine Java-Themen 1
F JTable mit Zellen die sich durch andere Eingaben füllen Allgemeine Java-Themen 1
A JTable - CellRange auslesen Allgemeine Java-Themen 2
A jTable Renderer Allgemeine Java-Themen 5
N JTable filtern Allgemeine Java-Themen 3
hdi JTable#print & Druckgröße Allgemeine Java-Themen 6
S JTable: Model durch ein anderes ersetzen Allgemeine Java-Themen 2
G JTable: ListSelectionListener removen Allgemeine Java-Themen 8
M JTable + ArrayList Allgemeine Java-Themen 3
G Aktualisierung einer JTable erfolgt nicht zuverlässig Allgemeine Java-Themen 14
E Hintergrund einer JTable änden Allgemeine Java-Themen 2
G Darstellung von Ergebnissen einer Dokumentensuche über eine JTable Allgemeine Java-Themen 19
Iron Monkey Inhalt von JTable in die Textdatei mit StringWidth schreiben Allgemeine Java-Themen 3
P jTable getSelectedRow? Allgemeine Java-Themen 2
B JTable eigene Daten Add Methode Allgemeine Java-Themen 2
B LEERE JTable MouseListener + popupmenu Allgemeine Java-Themen 2
X xml aus Zip in JTable Allgemeine Java-Themen 2
L jTable drag & drop einzelner Zeilen Allgemeine Java-Themen 4
S JTable und Spalten löschen Frage Allgemeine Java-Themen 5
H JTable per iText in PDF: Größenanpassung möglich? Allgemeine Java-Themen 2
F XML zu JTable mit JDOM Allgemeine Java-Themen 2
E JTable wird nicht angezeigt Allgemeine Java-Themen 11
Screen ImageIcon in Cell der JTable Allgemeine Java-Themen 2
G JTable mit Keylistener geht nicht Allgemeine Java-Themen 3
C Swing JTable Vector aus DB adden Allgemeine Java-Themen 3
A Swing JTable Polymorphismus Allgemeine Java-Themen 2
trash super + JTable Allgemeine Java-Themen 7
D JTable -> 1Spalte nur zahlen Allgemeine Java-Themen 2
L JTABLE setvalueat methode! Allgemeine Java-Themen 16
C Swing Daten zwischen JTable teilen Allgemeine Java-Themen 6
hdi JTable: Sortierung von Date-Objekten Allgemeine Java-Themen 4
B JTable nach Icon sortieren Allgemeine Java-Themen 6
N Exception beim auslesen einer JTable Allgemeine Java-Themen 5
D JTable mit GROUP BY Allgemeine Java-Themen 23
martin82 Regex - JTable - Filter Allgemeine Java-Themen 10
X JTable mit Checkboxen -> Setzen (true/false) der Checkboxen per Mouseklick... Allgemeine Java-Themen 3
P JTable drucken Allgemeine Java-Themen 8
A JTable Feldwerte in JTextFelder mit blättern Allgemeine Java-Themen 5
DStrohma [Erledigt] Wieso kann ich Taste 'ENTER' in JTable nicht belegen? Allgemeine Java-Themen 2
M jTable Allgemeine Java-Themen 19
D jTable und TableModel Allgemeine Java-Themen 2
B Exception bei leerem JTable verhindern Allgemeine Java-Themen 10
A Observable BeansBinding an einer JTable bzw. JXTable Allgemeine Java-Themen 3
P Textfile -> Array -> JTable Allgemeine Java-Themen 9
S JTable Aktuelisieren ber Wie ? Allgemeine Java-Themen 4
MQue JComboBox in JTable Allgemeine Java-Themen 4
J Ergebnismenge eines SQL-Queries in JTable anzeigen Allgemeine Java-Themen 3
MQue JTable alles rechts Allgemeine Java-Themen 8
G Checkboxen abfragen,Auswahl sichern, JTable laden Allgemeine Java-Themen 2
G Hibernate, JTable und Performance Allgemeine Java-Themen 17
R JTable und Cell Renderer Allgemeine Java-Themen 3
M JTable: Anzahl Zeichen bei Eingabe Allgemeine Java-Themen 2
S Welche Speicherung von Daten bei Kalendarfunktion der jtable Allgemeine Java-Themen 7
J keylistener auf jtable Allgemeine Java-Themen 19
C JTable, Abstand zwischen Zellen Allgemeine Java-Themen 2
G Eindeutiges Identifizieren einer JTable/Component z.laufzeit Allgemeine Java-Themen 2
D JTable -> ArrayIndexOutOfBoundsException bei Mausklick Allgemeine Java-Themen 2
S JTable editieren + in JTextField schreiben Allgemeine Java-Themen 7
G Daten in / für JTable beim Scrollen nachladen? Allgemeine Java-Themen 5
M JTable verändert Position auf meinem JPanel Allgemeine Java-Themen 3
P JTable Allgemeine Java-Themen 2
H JTable Löschen [Alle Zeilen aufeinmal Löschen] Allgemeine Java-Themen 6
P JTable setDataVector Allgemeine Java-Themen 2
D Scrollbalken in meiner JTable auf einmal weg. Allgemeine Java-Themen 2
P JTable Allgemeine Java-Themen 8
P JButtons mit JTable verknüpfen Allgemeine Java-Themen 16
G fehler bei JTable mit JDK1.6 Allgemeine Java-Themen 4
M CheckBox in JTable - ich verzweifle gleich Allgemeine Java-Themen 2
P JTable/Vector Allgemeine Java-Themen 5
P JTable Allgemeine Java-Themen 4
E JButton bleibt in der JTable Allgemeine Java-Themen 2
E JButton in einer Zelle von JTable Allgemeine Java-Themen 16
P JTable selektierte Zeile mitwandern Allgemeine Java-Themen 2
F Checkbox in JTable , eigener Cellrenderer -wie gehts weiter? Allgemeine Java-Themen 2
P JTable suchen in einer Spalte Allgemeine Java-Themen 24
G JTable wird nicht richtig aufgebaut Allgemeine Java-Themen 9
C Ausdrucken einer JTable in eine Datei mit Erhalt des Formats Allgemeine Java-Themen 3
W Columns austauschen/verschieben von jtable Allgemeine Java-Themen 3
P 3rd party JTable libraries (freeware/opensource) Allgemeine Java-Themen 19
D JTable aus Eclipse Ok, kompeliert aber nicht Allgemeine Java-Themen 6
G mySQL und JTable Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben