Ola Galera do GUJ !!! Sou novo no mundo Java e então novo forum.
Então… estou estudando o AbstractTableModel porque pelo que li, fazer a tabela com o default é uma furada, estou com umas duvidas e espero que vocês consigam me ajudar. Como estou usando swing vou explicar mais ou menos como está meu codigo, fiz um cadastro pequeno apenas de nome e telefone pra pega a estrutura, estou trabalhando com 4 classes “bean com JPA”, “Minha Tabela”, “Tabela View” que tem a chamada pra “Tela de Cadastro”.
1 - Quando faço um novo cadastro, os dados vão corretos pro banco, mas não é inserido na tabela. ai tiver que criar um botão a mais no “Tabela View” pra atualizar. (o botão está meio armengado) tentei até bota um metodo atualizar junto com o salvar e nada.
2 - Não estou conseguindo fazer multiplas exclusoes.
3- Se possivel queria uma dicas de como deixar o codigo mais limpo.
Minha Tabela.
[code]package View;
import Bean.Clientes;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class MinhaTableModel extends AbstractTableModel {
private List<Clientes> linhas;
private String[] colunas = new String[]{
"Nome", "Telefone"};
public MinhaTableModel() {
linhas = new ArrayList<Clientes>();
}
public MinhaTableModel(List<Clientes> lista) {
linhas = new ArrayList<Clientes>(lista);
}
@Override
public String getColumnName(int columnIndex) {
return colunas[columnIndex];
}
@Override
public int getRowCount() {
return linhas.size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case 0:
return String.class;
case 1:
return String.class;
default:
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Clientes p = linhas.get(rowIndex);
switch (columnIndex) {
case 0:
return p.getNome();
case 1:
return p.getTelefone();
default:
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
Clientes p = linhas.get(rowIndex);
switch (columnIndex) {
case 0:
p.setNome(aValue.toString());
case 1:
p.setTelefone(aValue.toString());
fireTableDataChanged();
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
public Clientes getCliente(int indiceLinha) {
return linhas.get(indiceLinha);
}
public void addCliente(Clientes cliente) {
linhas.add(cliente);
fireTableDataChanged();
}
public void removeCliente(int indiceLinha) {
linhas.remove(indiceLinha);
fireTableRowsDeleted(indiceLinha, indiceLinha);
}
public void addListaDeClientes(List<Clientes> clientes) {
int tamanhoAntigo = getRowCount();
linhas.addAll(clientes);
fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);
}
public void removeCliente(Clientes cliente) {
linhas.remove(cliente);
fireTableDataChanged();
}
public boolean isEmpty() {
return linhas.isEmpty();
}
public void limpar(){
linhas.clear();
}
}[/code]
Tabela View
[code]package View;
import Bean.Clientes;
import java.util.List;
import javax.swing.JTable;
public class ClientesView extends javax.swing.JFrame {
private MinhaTableModel model;
public ClientesView() {
initComponents();
EntityManager.getTransaction().begin();
addListaDeClientes(List);
}
public JTable getTbCliente() {
if (tbClientes == null) {
tbClientes = new JTable();
tbClientes.setModel(new MinhaTableModel());
}
return tbClientes;
}
public MinhaTableModel getModel() {
if (model == null) {
model = (MinhaTableModel) getTbCliente().getModel();
}
return model;
}
public void addCliente(Clientes cliente) {
getModel().addCliente(cliente);
}
public void removeCliente(int indiceLinha) {
getModel().removeCliente(indiceLinha);
}
private void addListaDeClientes(List<Clientes> lista) {
getModel().addListaDeClientes(lista);
}
// inserir novo cadastro
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
new CadastroView().setVisible(true);
}
// exlcuir
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
List.clear();
List = Query.getResultList();
int[] selected = tbClientes.getSelectedRows();
for (int i = 0; i < selected.length; i++) {
Clientes m = List.get(selected[i]);
EntityManager.remove(m);
removeCliente(selected[i]);
}
EntityManager.getTransaction().commit();
EntityManager.getTransaction().begin();
}
public void atualizarTabela() {
getModel().limpar();
List.clear();
List = Query.getResultList();
addListaDeClientes(List);
}
// atualizar
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
atualizarTabela();
}
public static void main(String args[]) {
new ClientesView().setVisible(true);
}[/code]
Cadastro View
[code]package View;
import Bean.Clientes;
import java.util.List;
import javax.swing.JTable;
public class ClientesView extends javax.swing.JFrame {
private MinhaTableModel model;
public ClientesView() {
initComponents();
EntityManager.getTransaction().begin();
addListaDeClientes(List);
}
public JTable getTbCliente() {
if (tbClientes == null) {
tbClientes = new JTable();
tbClientes.setModel(new MinhaTableModel());
}
return tbClientes;
}
public MinhaTableModel getModel() {
if (model == null) {
model = (MinhaTableModel) getTbCliente().getModel();
}
return model;
}
package View;
import Bean.Clientes;
public class CadastroView extends javax.swing.JFrame {
/** Creates new form CadastroView */
public CadastroView() {
initComponents();
}
@SuppressWarnings("unchecked")
private Clientes cliente = new Clientes();
private ClientesView cv = new ClientesView();
private void setNovoCliente(Clientes cliente) {
this.cliente = cliente;
}
public void novoCadastro() {
Clientes cad = new Clientes();
cad.setNome(tfNome.getText());
cad.setTelefone(tfTelefone.getText());
try {
if (entityManager1.getTransaction().isActive()) {
entityManager1.clear();
entityManager1.persist(cad);
entityManager1.getTransaction().commit();
} else {
entityManager1.getTransaction().begin();
entityManager1.persist(cad);
entityManager1.getTransaction().commit();
}
setNovoCliente(cad);
} catch (Exception ex) {
ex.printStackTrace();
}
tfNome.setText("");
tfTelefone.setText("");
}
private void btSalvarActionPerformed(java.awt.event.ActionEvent evt) {
novoCadastro();
cv.atualizarTabela();
}
public static void main(String args[]) {
new CadastroView().setVisible(true);
}[/code]