Olá pessoal,
Sou iniciante nessa parte de Swing e estou tomando uma surra para criar uma table, segui uns tutoriais do Mark e do Vinny como exemplo, porém, não consigo alterar o tamanho de uma coluna, não deixar o usuário alterar a sequência dessas colunas, inserir sempre o scroller e etc… Alguém pode dar uma olhada no meu código e ver o que estou fazendo de errado ou deixando de fazer??
Obrigada!!!
TableModel
// Implementação da tabela de clientes
public class ClienteTableModel extends AbstractTableModel {
/**
* Essa lista armazenará os objetos do tipo {@link Cliente} atualmente
* exibidos na tablela.
*/
private List<Cliente> clientes;
// ==============================================================
// Construtores.
// ==============================================================
/**
* Constutor que simplesmente instancia o nosso {@link List} que usaremos
* para guardar os valores.
*/
public ClienteTableModel() {
// no construtor, instanciamos o List
clientes = new ArrayList<Cliente>();
}
/**
* Criamos um construtor de conveniência para já popular a lista.
*
* @param lista
* a lista de clientes a ser adicionada.
*/
public ClienteTableModel(List<Cliente> listadeCliente) {
this();
clientes.addAll(listadeCliente);
System.out.println("Temos ["+clientes.size()+"] na lista");
}
/*
========================================
Métodos Implementados
========================================
*/
public int getRowCount() {
return clientes.size();
}
public int getColumnCount() {
return 4;
}
//Estas são todas as colunas dos atributos referentes ao Cliente
@Override
public String getColumnName(int coluna) {
// vamos retornar o nome de cada coluna
switch (coluna) {
case 0:
return "Nome"; // o nome da primeira coluna
case 1:
return "Bairro"; // o nome da segunda
case 2:
return "Rua";
case 3:
return "Número";
default:
return "";
}
}
@Override
public Class getColumnClass(int col) {
return String.class;
// return getValueAt(0, col).getClass();
}
//Refente a todos os atributos do cliente
public Object getValueAt(int linha, int coluna) {
Cliente cli = (Cliente) clientes.get(linha);
// façamos um switch
switch (coluna) {
case 0:
return cli.getNome(); // retornamos o nome
case 1:
return cli.getBairro(); // retornamos o sobrenome
case 2:
return cli.getRua(); // e o apelido
case 3:
return cli.getNumero(); // e o apelido
default:
return null;
}
}
@Override
public boolean isCellEditable(int linha, int coluna) {
// nesse caso, todas as células NÃO são editáveis
return false;
}
@Override
public void setValueAt(Object valor, int linha, int coluna) {
// aqui devemos atualizar o valor de nossos Clientes
// vemos em qual linha ele está
Cliente cli = clientes.get(linha);
// e vemos o que será atualizado
switch (coluna) {
case 0:
cli.setNome(valor.toString()); // mudamos o nome
break;
case 1:
cli.setBairro(valor.toString()); // mudamos o sobrenome
break;
case 2:
cli.setRua(valor.toString()); //
break;
case 3:
cli.setNumero(valor.toString()); //
break;
}
// é importante notificar os listeners a cada alteração
fireTableDataChanged();
}
...
View
public class ConsultarClienteForm extends JFrame {
private ClienteTableModel tb;
private int valorSelecionado;
private String selectedComboBoxItem;
private String parametroConsulta;
/** Creates new form Consil - Construtor*/
public ConsultarClienteForm() {
this.setTitle("Consultar Clientes");
this.instanciaTable();
initComponents(); //inicia os componentes encapsulados pelo netbeans
// this.centralizar();
this.populaComboBox();
System.out.println("Fim do construtor");
}
private void instanciaTable(){
tb = new ClienteTableModel();
// ClienteJpaController cjpac = new ClienteJpaController();
// tb.adicionaLista(cjpac.findClienteEntities()); //chamando este método eu preencho a tabela com todos os clientes
jTable1 = new JTable(tb);
jTable1.getTableHeader().setReorderingAllowed(false); //Não deixa o usuário mexer na sequencia das colunas
jTable1.getColumnModel().getColumn(0).setPreferredWidth(150); //largura da coluna
jTable1.getColumnModel().getColumn(1).setPreferredWidth(150); //largura da coluna
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //permite selecionar apenas uma linha na tabela
jTable1.setModel(tb);
JScrollPane scroller = new JScrollPane(jTable1);
scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scroller.setViewportView(jTable1);
scroller.setAutoscrolls(true);
getContentPane().add(scroller);
this.setVisible(true);
}
...