Entendi… entretanto ainda nao resolvi o problema do model. Pode ajudar?
Ok, até onde vc foi? E que problema vc está tendo? Conseguiu pelo menos exibir a tabela usando esse model até agora?
[quote=?Bruno?]Entendi, entretanto, remover deu esse erro:
[/quote]
Seria este erro no model, ainda nao decidi se vou permitir seleçao multipla na minha tabela. Nao sei qual variavel substitui essa model. Olhei no dao so tem uma variavel la, entao?
Como eu falei, o nome é getSelectedRow() não getSelectedIndex().
Você criou alguma variável para guardar seu model? Pode postar o código onde você cria o model e o insere dentro da JTable?
DAO:
package Cadastros;
import com.mysql.jdbc.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class AmigoDAO {
Menus.Banco bancoAmigo = new Menus.Banco();
public List<Amigo> carregar() {
try {
List<Amigo> amigos = new ArrayList<Amigo>();
//Código para carregar os amigos do banco aqui
PreparedStatement stmt = (PreparedStatement) bancoAmigo.con.prepareStatement("SELECT * FROM Amigos ORDER BY nome");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
//Criamos um novo amigo
Amigo amigo = new Amigo();
amigo.setCodigo(rs.getInt("codigo"));
amigo.setNome(rs.getString("nome"));
amigo.setEndereco(rs.getString("endereco"));
amigo.setBairro(rs.getString("bairro"));
amigo.setTelefone(rs.getString("Telefone"));
//Colocamos ele na lista
amigos.add(amigo);
}
//Retornamos a lista de amigos
return amigos;
} catch (SQLException e) {
//Se ocorrer erros, disparamos na forma de uma RuntimeException
//Isso evitará que tenhamos que ficar tratando erros que raramente ocorrem.
//E que não podemos fazer muita coisa para nos recuperar é o caso das SQLException.
throw new RuntimeException(e);
}
}
public void salvar(Amigo amigo) {
if (amigo.getCodigo() == -1) {
inserir(amigo); //Faz um INSERT no banco
} else {
atualizar(amigo); //Faz um UPDATE no banco.
}
}
public void inserir(Amigo amigo) {
try {
//Fazemos a inserção do amigo no banco
PreparedStatement stmt = (PreparedStatement) bancoAmigo.con.prepareStatement(
"INSERT INTO Amigos (nome, endereco, bairro, tel) VALUES(?,?,?,?)");
stmt.setString(1, amigo.getNome());
stmt.setString(2, amigo.getEndereco());
stmt.setString(3, amigo.getBairro());
stmt.setString(4, amigo.getTelefone());
stmt.executeUpdate();
//Obtemos a chave criada automaticamente
ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()) {
amigo.setCodigo(rs.getInt(1));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void atualizar(Amigo amigo) {
try {
//Fazemos a inserção do amigo no banco
java.sql.PreparedStatement stmt = bancoAmigo.con.prepareStatement(
"UPDATE Amigos SET nome=?, endereco=?, bairro=?, tel=? WHERE codigo=?");
stmt.setString(1, amigo.getNome());
stmt.setString(2, amigo.getEndereco());
stmt.setString(3, amigo.getBairro());
stmt.setString(4, amigo.getTelefone());
stmt.setInt(5, amigo.getCodigo()); //Precisamos informar quem está sendo alterado
stmt.executeUpdate();
//Obtemos a chave criada automaticamente
ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()) {
amigo.setCodigo(rs.getInt(1));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void remover(Amigo amigo){
}
}
Default
package Cadastros;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class AmigoTableModel extends AbstractTableModel {
private static final int COL_CODIGO = 0;
private static final int COL_NOME = 1;
private static final int COL_ENDERECO = 2;
private static final int COL_BAIRRO = 3;
private static final int COL_TELEFONE = 4;
private List<Amigo> valores;
//Esse é um construtor, que recebe a nossa lista de amigos
public AmigoTableModel(List<Amigo> valores) {
this.valores = new ArrayList<Amigo>(valores);
}
public int getRowCount() {
//Quantas linhas tem sua tabela? Uma para cada item da lista.
return valores.size();
}
public int getColumnCount() {
//Quantas colunas tem a tabela? Nesse exemplo, só 2.
return 2;
}
public String getColumnName(int column) {
//Qual é o nome das nossas colunas?
if (column == COL_CODIGO) {
return "Codigo";
}
if (column == COL_NOME) {
return "Nome";
}
if (column == COL_ENDERECO) {
return "Endereço";
}
if (column == COL_BAIRRO) {
return "Bairro";
}
if (column == COL_TELEFONE) {
return "Telefone";
}
return ""; //Nunca deve ocorrer
}
public Object getValueAt(int row, int column) {
//Precisamos retornar o valor da coluna column e da linha row.
Amigo amigo = valores.get(row);
if (column == COL_CODIGO) {
return amigo.getCodigo();
} else if (column == COL_NOME) {
return amigo.getNome();
} else if (column == COL_ENDERECO) {
return amigo.getEndereco();
} else if (column == COL_BAIRRO) {
return amigo.getBairro();
} else if (column == COL_TELEFONE) {
return amigo.getTelefone();
}
return ""; //Nunca deve ocorrer
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
//Vamos alterar o valor da coluna columnIndex na linha rowIndex com o valor aValue passado no parâmetro.
//Note que vc poderia alterar 2 campos ao invés de um só.
Amigo amigo = valores.get(rowIndex);
if (columnIndex == COL_NOME) {
amigo.setNome(aValue.toString());
} else if (columnIndex == COL_ENDERECO) {
amigo.setEndereco(aValue.toString());
} else if (columnIndex == COL_BAIRRO) {
amigo.setBairro(aValue.toString());
} else if (columnIndex == COL_TELEFONE) {
amigo.setTelefone(aValue.toString());
}
}
@Override
public Class<?> getColumnClass(int columnIndex) {
//Qual a classe das nossas colunas? Como estamos exibindo texto, é string.
if (columnIndex == COL_CODIGO) {
return Integer.class;
} else if (columnIndex == COL_NOME) {
return String.class;
} else if (columnIndex == COL_ENDERECO) {
return String.class;
} else if (columnIndex == COL_BAIRRO) {
return String.class;
} else if (columnIndex == COL_TELEFONE) {
return String.class;
}
return String.class;
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
//Indicamos se a célula da rowIndex e da columnIndex é editável. Nossa tabela toda é.
if (columnIndex == COL_CODIGO) {
return false;
} else {
return true;
}
}
public Amigo get(int row) {
return valores.get(row);
}
}
Ou essa variavel deveria ser criada no codigo fonte da minha tela?
Demorei um pouco para postar mas esta ai os codigos.
Não, estou pedindo para você postar o código da sua tela, onde você tem o JTable.
package Cadastros;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
public class Amigos extends javax.swing.JDialog {
/** Creates new form Clientes */
public Amigos(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension screenSize = tk.getScreenSize();
setLocation((screenSize.width - getSize().width) / 2,
(screenSize.height - getSize().height) / 2);
campoNome.requestFocus();
botaoApagar.setEnabled(false);
atualizar();
}
Menus.Banco bancoAmigos = new Menus.Banco();
ResultSet rs;
String Selecione;
public void remover() {
int selected = tabelaAmigos.getSelectedRow();
if (selected == -1) //Nenhuma linha selecionada?
return;
//Obtém o aluno no índice selecionado
Amigo amigo = Amigo.get(selected);
//Remove o aluno do banco
new AmigoDAO().remover(amigo);
//Se deu certo, remove também do JTable
AmigoTableModel.remover(selected);
}
public void limpar() {
campoNome.setText(null);
campoEndereco.setText(null);
campoBairro.setText(null);
campoTel.setText(null);
}
private boolean verifica() {
if (campoNome.getText().compareTo("") == 0) {
JOptionPane.showMessageDialog(this, "Informe o Nome!");
campoNome.requestFocus();
return false;
}
if (campoEndereco.getText().compareTo("") == 0) {
JOptionPane.showMessageDialog(this, "Informe o Endereço!");
campoEndereco.requestFocus();
return false;
}
return true;
}
public boolean verificaLinha() {
return true;
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jTabbedPane1 = new javax.swing.JTabbedPane();
jPanel1 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
campoBairro = new javax.swing.JTextField();
campoEndereco = new javax.swing.JTextField();
campoNome = new javax.swing.JTextField();
jLabel9 = new javax.swing.JLabel();
campoTel = new javax.swing.JFormattedTextField();
jPanel2 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
tabelaAmigos = new javax.swing.JTable();
jToolBar1 = new javax.swing.JToolBar();
BotaoCadastrar = new javax.swing.JButton();
jSeparator1 = new javax.swing.JToolBar.Separator();
botaoApagar = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Amigos");
setResizable(false);
jLabel2.setText("Nome:");
jLabel3.setText("Endereço:");
jLabel4.setText("Bairro:");
jLabel9.setText("Telefone:");
try {
campoTel.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("(##) ####-####")));
} catch (java.text.ParseException ex) {
ex.printStackTrace();
}
org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel1Layout.createSequentialGroup()
.addContainerGap()
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
.add(org.jdesktop.layout.GroupLayout.LEADING, campoEndereco, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 279, Short.MAX_VALUE)
.add(org.jdesktop.layout.GroupLayout.LEADING, campoNome, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 279, Short.MAX_VALUE)
.add(org.jdesktop.layout.GroupLayout.LEADING, jLabel3)
.add(org.jdesktop.layout.GroupLayout.LEADING, jPanel1Layout.createSequentialGroup()
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jLabel4)
.add(campoBairro, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 135, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel1Layout.createSequentialGroup()
.add(7, 7, 7)
.add(jLabel9))
.add(jPanel1Layout.createSequentialGroup()
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(campoTel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 138, Short.MAX_VALUE))))
.add(org.jdesktop.layout.GroupLayout.LEADING, jLabel2))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.add(jLabel2)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(campoNome, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jLabel3)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(campoEndereco, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel4)
.add(jLabel9))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(campoBairro, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(campoTel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(102, 102, 102))
);
jTabbedPane1.addTab("Informações", jPanel1);
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Dados Cadastrados", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(102, 102, 102))); // NOI18N
jScrollPane1.setEnabled(false);
tabelaAmigos.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Código", "Nome", "Endereço", "Bairro", "Telefone"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
};
boolean[] canEdit = new boolean [] {
false, false, false, false, false
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jScrollPane1.setViewportView(tabelaAmigos);
tabelaAmigos.getColumnModel().getColumn(0).setMinWidth(20);
tabelaAmigos.getColumnModel().getColumn(0).setPreferredWidth(20);
tabelaAmigos.getColumnModel().getColumn(0).setMaxWidth(25);
org.jdesktop.layout.GroupLayout jPanel2Layout = new org.jdesktop.layout.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 565, Short.MAX_VALUE)
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE)
);
jToolBar1.setRollover(true);
BotaoCadastrar.setFont(new java.awt.Font("Tahoma", 1, 11));
BotaoCadastrar.setText("CADASTRAR");
BotaoCadastrar.setToolTipText("");
BotaoCadastrar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BotaoCadastrarActionPerformed(evt);
}
});
jToolBar1.add(BotaoCadastrar);
jToolBar1.add(jSeparator1);
botaoApagar.setFont(new java.awt.Font("Tahoma", 1, 11));
botaoApagar.setText("APAGAR");
botaoApagar.setToolTipText("");
botaoApagar.setFocusable(false);
botaoApagar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
botaoApagar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
botaoApagar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botaoApagarActionPerformed(evt);
}
});
jToolBar1.add(botaoApagar);
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jToolBar1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 911, Short.MAX_VALUE)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(jTabbedPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 304, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(jToolBar1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 25, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(18, 18, 18)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
.add(jTabbedPane1, 0, 0, Short.MAX_VALUE)
.add(jPanel2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Amigos dialog = new Amigos(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
});
dialog.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton BotaoCadastrar;
private javax.swing.JButton botaoApagar;
private javax.swing.JTextField campoBairro;
private javax.swing.JTextField campoEndereco;
private javax.swing.JTextField campoNome;
private javax.swing.JFormattedTextField campoTel;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JToolBar.Separator jSeparator1;
private javax.swing.JTabbedPane jTabbedPane1;
private javax.swing.JToolBar jToolBar1;
private javax.swing.JTable tabelaAmigos;
// End of variables declaration
}
[quote=ViniGodoy]É possível sim. A tabela suporta seleção multipla.
Existe um método chamado getSelectedRows() que retorna um array de ints, contendo todas as linhas selecionadas.
Aí vc faz um método remover no seu model assim:
public void remover(int[] linhas) {
for (int linha = linhas.size()-1; linha >= 0; i--) {
valores.remove(linha);
fireTableRowDeleted(linha, linha);
}
}
[/quote]
Posso aproveitar o tópico para fazer uma pergunta? rsss
minha tela de consulta é exatamente igual a que vcs vem montando mas minha tabela tem um campo boolean, quero excluir mais de uma linha do tableModel por vez, todas que estiverem selecionada, até ai estou bem, mas só consigo usando Ctrl + click.
o que gostaria de fazer é usar o checkbox da linha para controlar a seleção (das linhas da tabela).
se o checkBox estiver marcado a linha será incluida na lista de exclusão, se estiver desmarcado a linha não estara na lista para excluir.
Do jeito normal quando eu desmarco um checkBox e em seguida clico no botão excluir a linha será excluida porque a linha retorna true para o metodo getSelectdRow certo?!.
falando de outro jeito eu gostaria de usar o evento StateChenged do checkBox para add ou excluir aquela linha da lista de exclusão.
tem como fazer?
meu método de exclusão é esse:
tenho o seguinte codigo no botão Excluir:
int selecionados[] = tabela.getSelectedRows();
if (selecionados.length > 0){
ArrayList<Produto> seraoExcluidos = new ArrayList<Produto>();
for (int i=0; i<selecionados.length; i++)
seraoExcluidos.add(model.getCliente(selecionados[i]));
for (Produto p : seraoExcluidos)
model.excluir(p);
>
Pode postar seu TableModel?
Se você não quiser usar a seleção normal da tabela, vai ter que percorrer seu model para achar quais linhas tem o valor selecionado.
[quote=ViniGodoy]Pode postar seu TableModel?
Se você não quiser usar a seleção normal da tabela, vai ter que percorrer seu model para achar quais linhas tem o valor selecionado.[/quote]
Achei o que eu estava tentando fazer, vergonhoso mas era só isso:
if (lista.size() > 0){
ArrayList<Produto> seraoExcluidos = new ArrayList<Produto>();
for (int i=0; i<lista.size(); i++)
if((Boolean)jTable1.getValueAt(i, 2) == true)//essa é a linha
seraoExcluidos.add(model.getCliente(i));
for (Produto p : seraoExcluidos)
model.excluir(p);
}
a unica coisa é que funciona apenas na primeira vez que clico no botão excluir. O q eu estou tentando fazer é um sistema de contas a pagar em que a tabela de dados listaria as contas por cliente e o usuario seleciona apenas as contas a serem pagas. No sistema da minha empresa qndo eu termino a baixa altomaticamente a janela é fechada, se o meu sistema imitar o deles esse bug nem será um problema…rsss
Obrigado pela disponibilidade.>
O ideal é jamais usar o getValueAt. Esse método deveria ser de uso do JTable.
Seu model deve ter informações suficientes para você fazer algo como:
model.excluirMarcados();
oi
Oi ViniGodoy, parabens esse foi o melhor post q já vi aqui no GUJ.
eu sou novato tbm tentando aprender sobre o tableModel, entao eu estou alterando os dados para a minha necessidade. (uso o netbeans)
porém tem um erro que nao estou conseguindo detectar. Na linha 71. Veja como ficou;
você poderia me dar uma mãozinha?
Grato
public class TableModelProduto extends AbstractTableModel {
private static final int COL_CODIGO = 0;
private static final int COL_PRODUTO = 1;
private static final int COL_VALORPRODUTO = 2;
private static final int COL_ATIVO = 3;
private static final int COL_TIPOPRODUTO = 4;
private List<Produto> listaProdutos;
//Esse é um construtor, que recebe a nossa lista de livros
public TableModelProduto(List<Produto> listaProdutos) {
this.listaProdutos = new ArrayList<Produto>(listaProdutos);
}
@Override
public int getRowCount() {
//Quantas linhas tem sua tabela? Uma para cada item da lista.
return listaProdutos.size();
}
@Override
public int getColumnCount() {
//Quantas colunas tem a tabela? Nesse exemplo, só 2.
return 2;
}
@Override
public String getColumnName(int column) {
//Qual é o nome das nossas colunas?
if (column == COL_CODIGO) {
return "CÓDIGO";
}
if (column == COL_PRODUTO) {
return "PRODUTO";
}
if (column == COL_VALORPRODUTO) {
return "VALOR";
}
if (column == COL_ATIVO) {
return "PRODUTO ATIVO";
}
if (column == COL_TIPOPRODUTO) {
return "TIPO DE PRODUTO";
}
return ""; //Nunca deve ocorrer
}
@Override
public Object getValueAt(int row, int column) {
//Precisamos retornar o valor da coluna column e da linha row.
Produto produto = listaProdutos.get(row);
if (column == COL_CODIGO) {
return produto.getIdProduto();
} else if (column == COL_PRODUTO) {
return produto.getProduto();
} else if (column == COL_VALORPRODUTO) {
return produto.getValorProduto();
} else if (column == COL_ATIVO) {
return produto.getProdutoContinuado();
} else if (column == COL_TIPOPRODUTO) {
return produto.getTipoProduto();
}
return ""; //Nunca deve ocorrer
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
//Vamos alterar o valor da coluna columnIndex na linha rowIndex com o valor aValue passado no parâmetro.
//Note que vc poderia alterar 2 campos ao invés de um só.
Produto produto = listaProdutos.get(rowIndex);
if (produto == COL_CODIGO) {
produto.setIdProduto(rowIndex);
} else if (columnIndex == COL_PRODUTO) {
produto.setProduto(aValue.toString());
} else if (columnIndex == COL_VALORPRODUTO) {
produto.setValorProduto(Double.parseDouble(aValue.toString()));
} else if (columnIndex == COL_ATIVO) {
produto.setProdutoContinuado(Boolean.parseBoolean(aValue.toString()));
} else if (columnIndex == COL_TIPOPRODUTO) {
produto.setTipoProduto(aValue.toString());
}
}
@Override
public Class<?> getColumnClass(int columnIndex) {
//Qual a classe das nossas colunas? Como estamos exibindo texto, é string.
return Integer.class;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
//Indicamos se a célula da rowIndex e da columnIndex é editável. Nossa tabela toda é.
if (columnIndex == COL_CODIGO) {
return false;
} else {
return true;
}
}
//Já que esse tableModel é de livros, vamos fazer um get que retorne um livro inteiro.
//Isso elimina a necessidade de chamar o getValueAt() nas telas.
public Produto get(int row) {
return listaProdutos.get(row);
}
Deveria ser:
if (columnIndex == COL_CODIGO) {
Você fez com produto no lugar de columnIndex.
Vini Obrigadão, finalmente eu consegui implementar a minha tableModel.
Agora outra duvida, eu estou conseguindo fazer alteração normal, porém ela nao atualiza em tempo de execução. tenho que fechar e abrir a janela para ela atualizar.
o que eu preciso fazer?
grato
[quote=welington2502]Vini Obrigadão, finalmente eu consegui implementar a minha tableModel.
Agora outra duvida, eu estou conseguindo fazer alteração normal, porém ela nao atualiza em tempo de execução. tenho que fechar e abrir a janela para ela atualizar.
o que eu preciso fazer?
grato[/quote]
Dê um revalidate() e repaint() no seu JTable toda vez que você atualizar os valores da tabela.
Rafael_Leal…
Obrigado pela dica
eu coloquei dentro do botao salvar e nao funcinou, coloquei no lugar errado?
revalidate() e repaint()
dentro do botão salvar?
Pois é…
Vc quer é atualizar o valor da table quando vc seta os valors via codigo?
Se sim toda vez que vc setar… faça o que disse. Pois esses metodos somente atualiza a exibiçao dos valores dos componentes javax.swing caso os mesmos forem alterados via código.
Se for via teclado nem precisa.
Se vc fizer isso no botao salvar… vc sô vai arializar a tela ao salvar.
Não consegui fazer funcionar. teria outra ideia?
abs