Το σκεπτικο ειναι απλα να κανεις annotate τα fields απο μια κλαση σου με στοιχεια οπως την κλαση του,σε τι στηλη αντιστοιχει και τα getters και setters του και αυτοματα να φτιαξεις ενα TableModel (και οχι μονο) που να μιλαει απευθειας με τα objects σου.
Ξερω οτι υπαρχουν διαφορες λυσεις για binding αλλα εφαγα ενα κολλημα ξαφνικα και ηθελα να δοκιμασω μια ιδεα ακομα και αν υπαρχει.
Ο κωδικας που ειναι να γραψεις ,οπως φαινεται και στο demo package ,ειναι αυτος :
Code: Select all
@IsBean(type = "PersonBean")
public class PersonBean {
@IsField(clazz = Integer.class, collumn = "ID", getter = "getId", setter = "setId")
private Integer id;
@IsField(clazz = String.class, collumn = "NAME", getter = "getName", setter = "setName")
private String name;
@IsField(clazz = Date.class, collumn = "LAST LOGIN", getter = "getLogin", setter = "setLogin")
private Date login;
@IsField(clazz = Boolean.class, collumn = "MALE", getter = "isMale", setter = "setMale")
private Boolean male;
......
(getters,setters,constructors)
Code: Select all
PersonBean[] beans = ..... ;
ITableRow[] rows = BeanManager.parse(beans, "PersonBean");
JTable table = new JTable(new DefaultTableBeanModel( rows ));

Note 1: παιζει με reflection αν προτιμησει καποιος annotations.Αλλα μπορει να το αποφυγει κανοντας implement το ITableModel και γραφοντας τα CellPredicates με το χερι.CellPredicate ειναι κατι σαν adapter η bridge αναμεσα στα get και set του object και των get και set του TableModel ωστε να παρεχεται καποιου ειδους ανεξαρτησια.
Note 2: Στο demo το SAVE button σωζει τα MODEL objects (τα source beans οχι αυτα που βλεπει το table model) σε xml αρχειο και τα κανει load at startup.Αυτο υποτιθεται για να φανει οτι αλλαγες στο table προκαλουν αλλαγες και στα source objects.
Btw δεν υποτιθεται οτι ειναι safe.Το κρασαρεις ανετα με κακη χρηση.