ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
1046
1046
EMPFEHLEN
-
31.03.09 21:33 #1
- Registriert seit
- Jul 2007
- Beiträge
- 3
Hallo, dies ist mein erster Post und ich hoffe es passt so

Ich möchte in einer JTable zur Laufzeit in einer Spalte bei einer Änderung das Änderungsdatum neu setzen.
Ich habe eine einfach Klasse erstellt (ToDoTableModel):
public class ToDoTableModel extends DefaultTableModel {
Dort wird einfach nur "isCellEditable" geändert um die Bearbeitung auf ein paar spezielle Spalten einzugrenzen.
Ich habe meine Testanwendung (ToDoURL) auf ein Miminum heruntergebrochen.
Ich erzeuge die JTable:
Per Button wird jetzt in Spalte 5 in der gewählten Zeile das Datum gesetzt. Soweit funktioniert noch alles. Ich brauche die Funktion aber im "tableChanged" Event:Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14
[COLOR="Blue"]myTableModel = new ToDoTableModel(new Object[0][0], COLHEADS); urlTable = new JTable(myTableModel);[/COLOR] Es gibt in der Applikation einen Testbutton mit folgendem Source: [COLOR="blue"]public void actionPerformed(ActionEvent ae) { Object eventTarget = ae.getSource(); if (eventTarget==jbtest) { int selectedRow = urlTable.getSelectedRow(); urlTable.setRowSelectionInterval(selectedRow,selectedRow); urlTable.setColumnSelectionInterval(5,5); urlTable.setValueAt("xx.xx.2009 xx:xx:xx", selectedRow, 5); } else if (eventTarget==jbnewentry) { newURL(); } }[/COLOR]
Wenn ich den Code dort nutze kommt einCode java:1 2 3 4 5 6 7 8 9 10
[COLOR="blue"]myTableModel.addTableModelListener(new TableModelListener() { public void tableChanged(TableModelEvent tme) { switch (tme.getType()) { case TableModelEvent.UPDATE: System.out.println("UPDATE"); int selectedRow = urlTable.getSelectedRow(); urlTable.setRowSelectionInterval(selectedRow,selectedRow); urlTable.setColumnSelectionInterval(5,5); urlTable.setValueAt("xx.xx.2009 xx:xx:xx", selectedRow, 5); break;[/COLOR]
"Exception occurred during event dispatching:
java.lang.StackOverflowError"...
Es muss doch eine einfach Option geben die Daten jetzt "on the fly" zu ändern.
Für eine Lösung bin ich dankbar.
Gruß Michael (Java Neuling...)Geändert von MichaelOswald (01.04.09 um 20:27 Uhr)
-
Exceptions sind in Java eigentlich so gut zu lesen, dass man selber schnell auf das Problem dahinter kommt. Guck dir deinen StackOverflowError mal genau an. Darin müßtest du sehen, dass zwei oder mehr Methoden sich immer abwechselnd gegenseitig aufrufen. Dadurch ergibt sich eine Endlosschleife und der Stack für die Aufrufe ist dann natürlich irgendwann zu Ende.
Dann schau ob du rausfindest warum sich dass immer wieder gegenseitig aufruft. Damit hast du dann einen Ansatzpunkt was du ändern mußt.
(Ich habe mir den Code jetzt mal nicht angeschaut. Bitte nutze doch bei deinem nächste Post die zur Verfügung stehenden Code Tags [java]..[/java])
-
01.04.09 20:30 #3
- Registriert seit
- Jul 2007
- Beiträge
- 3
Hallo zeja,
erst einmal Danke - da ich Java in einem Jahr jetzt über eine Internet-Abendschule gelernt habe sind die Fehlermeldungen für mich noch nicht wirklich aussagekräftig. Ich nehme an das es evtl. daran hängt das ich beim
Durch den setValueAt wird wahrscheinlich wieder ein tableChanged aufgerufen usw...Code java:1 2 3
public void tableChanged(TableModelEvent tme) { den setValueAt-Befehl nutze...
Dann fehlt mir allerdings die Option noch anders festzustellen wann die Row verändert wurde um Datum/Uhrzeit zu ändern.
Gruß Michael
-
Dann poste doch mal die Exception.
-
02.04.09 11:24 #5
- Registriert seit
- Jul 2007
- Beiträge
- 3
Hallo,
erst mal Danke für die Anregungen - aber....
Wenn ich hier was poste dann suche ich eine Lösung.
In meinem Fall möchte ich einfach in einer Zeile der JTable nach einer Änderung ein Änderungsdatum aktualisieren. Ich dachte das die Option über das
tableChanged-Event die beste wäre da dort ja abgefragt werden kann ob ein UPDATE, DELETE oder INSERT ausgeführt wurde.
Das führte aber wohl zu dem Fehler der bei mir aufgetreten ist. Ich habe jetzt gesucht und mir folgende Lösung zusammengebaut:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
urlTable.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent pce) { int selectedRow = urlTable.getSelectedRow(); if (selectedRow!=-1) { if (pce.getOldValue()!=null) { Object oldValue = pce.getOldValue(); if (oldValue instanceof DefaultCellEditor) { Object value = ((DefaultCellEditor)oldValue).getCellEditorValue(); if (value!=null) { urlTable.setValueAt(mk.getDate()+" "+mk.getTime(), selectedRow, 6); } } } } } });
Die Zeile mit dem instanceof DefaultCellEditor muss sein da bei einem späteren DISPOSE der Maske dort dann ein JViewPort übergeben wird - und es dann wieder eine Exception gibt.
Es gibt bestimmt noch andere Lösungen, aber die hier funktioniert erst mal.
Gruß Michael
Ähnliche Themen
-
Netbeans: Column Header im jTable zur Laufzeit ändern
Von Havoc][ im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 1Letzter Beitrag: 29.10.07, 22:23 -
JTable zur Laufzeit aktualisieren
Von cHucKy51 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 6Letzter Beitrag: 03.08.07, 15:59 -
Code zur Laufzeit ändern
Von RealHAZZARD im Forum JavaAntworten: 6Letzter Beitrag: 19.07.07, 01:47 -
Dialoggröße zur Laufzeit ändern
Von NMO im Forum VisualStudio & MFCAntworten: 5Letzter Beitrag: 12.09.06, 16:18 -
JTable - Zellenfarbe zur Laufzeit ändern?
Von freek0815 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 5Letzter Beitrag: 30.08.06, 00:13





Zitieren

Login





