Renderers Customizados. ObjectTableModel

29 08 2010

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!








Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 154 outros seguidores