Evo ti jedan primjer pa ga samo doradi malo. O dosta stvari nisam vodio računa, tipa da li su metodi javni ili privatni, da li metod vraća nešto i šta je to nešto, itd... to doradi sam kako ti odgovara.
Ideja je da pokupiš sve metode koje počinju sa get i da model zasnivaš na tome.
Code:
public class ReflectionModel extends AbstractTableModel {
private List lista;
private Class c;
private List<String> columnNames = new ArrayList<String>();
public ReflectionModel(List lista) {
if (lista != null && lista.size() > 0) {
this.lista = lista;
c = lista.get(0).getClass();
Method[] methods = c.getDeclaredMethods();
for (Method m : methods) {
if (m.getName().startsWith("get")) {
System.out.println(m.getName());
columnNames.add(m.getName().substring(3));
}
}
} else {
System.out.println("Vidi sta ces!!!");
}
}
@Override
public int getRowCount() {
return lista.size();
}
@Override
public int getColumnCount() {
return columnNames.size();
}
@Override
public String getColumnName(int column) {
return columnNames.get(column);
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
try {
Object o = lista.get(rowIndex);
Class cl = o.getClass();
Method m = cl.getMethod("get" + columnNames.get(columnIndex), new Class[]{});
return m.invoke(o);
} catch (Exception ex) {
ex.printStackTrace();
return ex.getMessage();
}
}
}
A upotrebljavaš na sledeći način:
Code:
List l = new ArrayList();
l.add(new TvojObjekat());
l.add(new TvojObjekat());
...
...
ReflectionModel model = new ReflectionModel(l);
jTable.setModel(model);
Nadam se da sam ti pomogao ili te bar uputio u pravom smjeru.
[Ovu poruku je menjao bantu dana 10.07.2012. u 15:58 GMT+1]