Fiz algumas atualizações no ObjectTableModel e está disponivel no site do projeto.
A principal modificação é que não é mais necessario ficar criando formatters pra tudo, antes era necessario criar um pra int, pra float, pra double, pra boolean e etc..
Os tipos primitivos e Strings são suportados sem precisar nada mais do que “@Resolvable”.
Outra modificação é que agora é possivel usar TableCellRenderers com os componentes, só é necessario atribuir o Renderer a JTable(Que outra hora mostro como fazer isso).
Mas por enquanto, aqui vai um exemplo de como mostrar uma tabela que tenha um JCheckBox.
O Modelo (Sem formatters customizados para tipos que não sejam Strings)
public class Person {
@Resolvable
private String name;
@Resolvable
private int age;
@Resolvable
private boolean live;
public Person(String name, int age, boolean live) {
this.name = name;
this.age = age;
this.live = live;
}
public void printAttrs() {
System.out.print("Name: " + name);
System.out.print(" Age: " + age);
System.out.println(" Live? " + live);
}
}
E como colocar na tabela.
public class TableTeste {
public static void main(String[] args) {
AnnotationResolver resolver = new AnnotationResolver(Person.class);
FieldResolver cols[] = resolver.resolve("name:Name,age:Age,live:Live");//Pega as colunas
final ObjectTableModel<Person> model = new ObjectTableModel<Person>(cols);
model.setEditableDefault(true);//Para poder modificar o valor
//Coloca itens na tabela
model.add(new Person("Marky", 19, true));
model.add(new Person("Douglas", 20, true));
model.add(new Person("Adams", 17, true));
model.add(new Person("Vscs", 37, true));
model.add(new Person("Pedro", 58, false));
//Cria e mostra na tela os componentes
JFrame frame = new JFrame("ObjectTableModel v2.7");
frame.setContentPane(new JPanel(new BorderLayout()));
JScrollPane pane = new JScrollPane();
pane.setViewportView(new JTable(model));
frame.add(pane, BorderLayout.CENTER);
JButton show = new JButton("Show");
show.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for(Person p : model.getData())
p.printAttrs();
}
});
frame.add(show, BorderLayout.SOUTH);
frame.setSize(400,400);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Rodando a main do segundo vemos uma tabela onde o terceiro campo é um JCheckBox, e o botão (“show”) mostra os atributos dos objetos das linhas.
Try it!