Hallo,
ich bräuchte mal wieder eine Anregung. Folgendes Szenario:
Ich hab eine JTable, die zweite Spalte ist editierbar, die anderen nicht. Für die editierbare Spalte hab ich einen eigenen TableCellEditor geschrieben. Dieser liefert für jede Zelle dieser Spalte verschiedene Komponenten, zur Zeit entweder ein JTextField zur normalen Eingabe, oder eine JComboBox mit einer Auswahl. So weit, so gut. Funktioniert alles ohne Probleme. Was jetzt halt noch hinzukommt ist eine Überprüfung der Eingabe, natürlich nur bei den TextFields.
Ausschaun soll der Check wie folgt:
Der User gibt irgend etwas ein und bestätigt mit Enter. Dann soll geprüft werden ob der Wert passt, wenn ja wird er übernommen. Wenn nicht, erscheint eine OptionPane die den Fehler zeigt, bestätigt er mit 'ok' wird in der Table wieder das Feld das er editiert hat ausgewählt und er kann seinen Text anpassen.
Und jetzt stellt sich mir die Frage, wie ich das am Besten mache:
Erster Versuch:
Ich prüf in der setValueAt-Methode des TableModels ob der Wert passt, wenn nicht wird in der Übergeordneten Klasse eine Funktion (checkError) aufgerufen die die OptionPane anzeigt und anschließend das Text-Feld in der Table wieder auswählt.
Probleme die ich zur Zeit bei diesem Ansatz noch habe:
An die checkError-Methode werden rowIndex und columnIndex der setValueAt Methode übergeben, damit ich weiß welche Zelle ich nachdem ich die OptionPane angezeigt habe, auswählen muss.
Die Auswahl passiert mit
table.changeSelection(row, col, toggle, extend);
Problem 1:
Wenn er ich einen Wert eingebe und mit Enter bestätige springt die Auswahl der Table automatisch auf die nächste Zeile, changeSelection bewirkt hier nichts. Komischerweise funktioniert ein
changeSelection(row-1, col, toggle, extend);
schon und er selektiert die Zeile davor, was mir aber nichts bringt.
Problem 2:
Wenn ich die Auswahl wie unter Problem 1 setzte, selektiert er zwar die richtige Zelle, aber man befindet sich nicht direkt im TextField. Man muss die Zelle nochmals anklicken um direkt ins TextField zu kommen und den Wert editieren zu können.
Also sollte der Ansatz grundsätzlich passen, wäre ich über Hilfe zu den beiden Problemen dankbar. Falls ich den Eingabe-Check besser anders lösen sollte, bitte ich um einige Hinweise.
Danke schonmal!
ich bräuchte mal wieder eine Anregung. Folgendes Szenario:
Ich hab eine JTable, die zweite Spalte ist editierbar, die anderen nicht. Für die editierbare Spalte hab ich einen eigenen TableCellEditor geschrieben. Dieser liefert für jede Zelle dieser Spalte verschiedene Komponenten, zur Zeit entweder ein JTextField zur normalen Eingabe, oder eine JComboBox mit einer Auswahl. So weit, so gut. Funktioniert alles ohne Probleme. Was jetzt halt noch hinzukommt ist eine Überprüfung der Eingabe, natürlich nur bei den TextFields.
Ausschaun soll der Check wie folgt:
Der User gibt irgend etwas ein und bestätigt mit Enter. Dann soll geprüft werden ob der Wert passt, wenn ja wird er übernommen. Wenn nicht, erscheint eine OptionPane die den Fehler zeigt, bestätigt er mit 'ok' wird in der Table wieder das Feld das er editiert hat ausgewählt und er kann seinen Text anpassen.
Und jetzt stellt sich mir die Frage, wie ich das am Besten mache:
Erster Versuch:
Ich prüf in der setValueAt-Methode des TableModels ob der Wert passt, wenn nicht wird in der Übergeordneten Klasse eine Funktion (checkError) aufgerufen die die OptionPane anzeigt und anschließend das Text-Feld in der Table wieder auswählt.
Probleme die ich zur Zeit bei diesem Ansatz noch habe:
An die checkError-Methode werden rowIndex und columnIndex der setValueAt Methode übergeben, damit ich weiß welche Zelle ich nachdem ich die OptionPane angezeigt habe, auswählen muss.
Die Auswahl passiert mit
table.changeSelection(row, col, toggle, extend);
Problem 1:
Wenn er ich einen Wert eingebe und mit Enter bestätige springt die Auswahl der Table automatisch auf die nächste Zeile, changeSelection bewirkt hier nichts. Komischerweise funktioniert ein
changeSelection(row-1, col, toggle, extend);
schon und er selektiert die Zeile davor, was mir aber nichts bringt.
Problem 2:
Wenn ich die Auswahl wie unter Problem 1 setzte, selektiert er zwar die richtige Zelle, aber man befindet sich nicht direkt im TextField. Man muss die Zelle nochmals anklicken um direkt ins TextField zu kommen und den Wert editieren zu können.
Also sollte der Ansatz grundsätzlich passen, wäre ich über Hilfe zu den beiden Problemen dankbar. Falls ich den Eingabe-Check besser anders lösen sollte, bitte ich um einige Hinweise.
Danke schonmal!