Ich persönlich würde keine Buttons ins TableModel stecken, eher eigene selbstgeschiebene aber auf jeden Fall einfacherer Objekte.
Und wenn man auf den "gedrückt" Effekt des Buttons verzichten kann, würde ich einen MouseListener anstelle des ButtonEditors verwenden - verringert m.M. die Komplexität. Und ausschließlich einen ButtonRenderer verwenden, damit der Anwender erkennt, dass man hier drücken kann.
Allgm. Anmerkungen:
- Warum übergibst Du Deinem ButtonEditor eine JCheckBox, die nie verwendet wird
- Da auf allen Buttons nur "Save" steht, könnte man sich das ständige setText(...) im ButtonRender sparen und nur einmalig im Konstruktor setzen.
Zum Problem:
Eine (evtl. auch die) Ursache, dass die Buttons verschwinden liegt darin, dass die [code]getCellEditorValue()[/code] des Editors einen String zurück gibt. Der Rückgabewert dieser Methode wird in das TableModel geschrieben. D.h. an der Stelle des Models an der vorher ein JButton war, steht jetzt ein String. Damit wird für diese Zelle nicht mehr der DefaultRenderer/Editor für JButton.class sondern für String.class verwendet. Was dazu führt, dass im Renderer zunächst "Save" und bei nochmaligem Editieren "javax.swing.JButton..." angezeigt wird.