E ai josimarsis, blz?
Então, eu já li todos esses posts que o ViniGodoy te passou e acho importante vc olhar…além disso seria legal vc entender Reflection(se não conhecer).Segue o exemplo: vamos considerar um exemplo simples:Clientes.
1º passo: vamos criar uma annotation - depois explico melhor sobre ela.
[code]import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Coluna {
//vamos utilizar esta annotation para pegar o nome da coluna,posicao no jtable e o formato que queremos mostrar - vamos usar com uma data
//como exemplo.
String nome();
int posicao();
String formato() default “%s”;
}[/code]
2º passo:vamos criar o bean com as annotation:
[code]import java.util.Calendar;
public class ClienteBean {
private Integer codigoCliente;
private String nomeCliente = “”;
private String cpf = “”;
private Calendar dataNascimento;
public void setCodigoCliente(Integer codigoCliente) {
this.codigoCliente = codigoCliente;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public void setDataNascimento(Calendar dataNascimento) {
this.dataNascimento = dataNascimento;
}
public void setNomeCliente(String nomeCliente) {
this.nomeCliente = nomeCliente;
}
@Coluna(posicao=0,nome="Código do Cliente")//posicao no jable e o nome para exibir na coluna
public Integer getCodigoCliente() {
return codigoCliente;
}
@Coluna(posicao=3,nome="CPF")//posicao no jable e o nome para exibir na coluna
public String getCpf() {
return cpf;
}
@Coluna(posicao=2,nome="Data de Nascimento", formato="%1$Td/%1$Tm/%1$TY") //posicao no jable, o nome para exibir na coluna e formato //para data, senão ele iria chamar toString de Calendar.
public Calendar getDataNascimento() {
return dataNascimento;
}
@Coluna(posicao=1,nome="Nome do Cliente")
public String getNomeCliente() {
return nomeCliente;
}
}[/code]
3º passo e o mais importante: implementar TableModelPadraoParaBean
import java.lang.reflect.Method;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class TableModelPadraoParaBean extends AbstractTableModel {
private Class<?> classe;
private List<?> lista;
public TableModelPadraoParaBean(List<?> linhas) {
this.setLinhas(linhas);
if (linhas != null)
this.classe = linhas.get(0).getClass();
}
public int getRowCount() {
if (lista != null) {
return lista.size();
} else {
return 0;
}
}
public int getColumnCount() {
int colunas = 0;
for(Method m : classe.getDeclaredMethods()){
if(m.isAnnotationPresent(Coluna.class)){
colunas++;
}
}
return colunas;
}
public boolean isCellEditable(int row, int col) {
return false;
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public void setLinhas(List<?> linhas) {
this.lista = linhas;
fireTableDataChanged();
}
public Object getValueAt(int rowIndex, int columnIndex) {
try{
Object objeto = lista.get(rowIndex);
for(Method m : classe.getDeclaredMethods()){
Coluna c = m.getAnnotation(Coluna.class);
if(c != null && c.posicao() == columnIndex){
return String.format(c.formato(), m.invoke(objeto));
}
}
}catch(Exception ex){
ex.printStackTrace();
}
return "";
}
public String getColumnName(int coluna){
for(Method m : classe.getDeclaredMethods()){
Coluna c = m.getAnnotation(Coluna.class);
if(c != null && c.posicao() == coluna ){
return c.nome();
}
}
return "";
}
}
E para testar um exemplo usando o NetBeans:
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import resultadoonline.gui.ClienteBean;
import resultadoonline.gui.TableModelPadraoParaBean;
public class NewJFrame extends javax.swing.JFrame {
public NewJFrame() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jTable1.setModel(new TableModelPadraoParaBean(linhasClientes));
jScrollPane1.setViewportView(jTable1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(28, 28, 28)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(34, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 303, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(139, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
linhasClientes = new ArrayList<ClienteBean>();
ClienteBean cb1 = new ClienteBean();
cb1.setCodigoCliente(1);
cb1.setNomeCliente("Ronaldo");
cb1.setDataNascimento(Calendar.getInstance());
cb1.setCpf("131.216.564-89");
ClienteBean cb2 = new ClienteBean();
cb2.setCodigoCliente(2);
cb2.setNomeCliente("Fernanda da Silva");
cb2.setDataNascimento(Calendar.getInstance());
cb2.setCpf("291.996.533-00");
linhasClientes.add(cb1);
linhasClientes.add(cb2);
new NewJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
// End of variables declaration
private static List<ClienteBean> linhasClientes;
}
Se ficar com dúvida no codigo me avisa…
Abraços