Boa tarde, meu nome é Pablo Henrique!
Estou com o seguinte problema tenho uma Tabela implementada com AbstractTableModel onde listo todas as matérias, e tenho um botão chamado *Alterar, quando seleciono a linha e clico neste botão aparece JFrame interno para alterar os dados, ai tudo bem, só que nesta tela onde tem a tabela queria poder deixar armazenado os seguintes itens: o objeto (matéria) da linha selecionada, o número da linha e da coluna também, só que quando fecho o JFrame Interno esses dados não ficam.
Imagem da tabela:

Método do botão alterar:
private void btAlterarActionPerformed(java.awt.event.ActionEvent evt) {
if (tbMateria.getSelectedRow() > -1) {
coluna = tbMateria.getSelectedColumn();
linha = tbMateria.getSelectedRow();
materia = new ControleMateria().listar().get(linha); // pego as informações da lina e adiciona ao objeto matéria
TelaMenuMateriaMDI telaMenuMateriaMDI = new TelaMenuMateriaMDI();
area.add(telaMenuMateriaMDI);
telaMenuMateriaMDI.setVisible(true);
} else {
JOptionPane.showMessageDialog(null, "Selecione a matéria");
}
}
Quando eu clico no botão registrar as informações são alteradas no banco de dados corretamente, ai fecho esta janela e fica a janela que tem a tabela, ai uso este método para tentar atualizar a tabela:
private void formInternalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
tableModel.setValueAt(materia, linha, coluna);
}
Mas este método da erro, o objeto volta como nulo, e a linha e a coluna aparecem com o valor zero.
**Alguém poderia me explicar o motivo disso acontecer, e como poderia contornar este problema
Usa um update… Já tentou?
Como assim? se for o update do banco de dados ele funciona, só que não consigo listar na tabela depois de atualizado
Vê isso se te ajuda;
public void preencherTabela(String SQL){
ArrayList dados = new ArrayList();
String[] Colunas = new String[]{"ID","Data","Apartamento","Solicitação" ,"Usuario" ,"Hora" ,"Atendente" ,"Status"};
conecta.executeSQL(SQL);
try {
conecta.resultset.first();
do{
dados.add(new Object[]{conecta.resultset.getInt("ID"), conecta.resultset.getString("Data"), conecta.resultset.getString("Apartamento"), conecta.resultset.getString("Solicitação"), conecta.resultset.getString("Usuario") , conecta.resultset.getString("Hora") , conecta.resultset.getString("Atendente") ,conecta.resultset.getString("Status")});
}while(conecta.resultset.next());
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null,"Não foi possível retornar a pesquisa ");
}
ModeloTabela modelo = new ModeloTabela(dados, Colunas);
jTable1.setModel(modelo);
jTable1.getColumnModel().getColumn(0).setPreferredWidth(80);
jTable1.getColumnModel().getColumn(0).setResizable(false);
jTable1.getColumnModel().getColumn(1).setPreferredWidth(80);
jTable1.getColumnModel().getColumn(1).setResizable(false);
jTable1.getColumnModel().getColumn(2).setPreferredWidth(80);
jTable1.getColumnModel().getColumn(2).setResizable(false);
jTable1.getColumnModel().getColumn(3).setPreferredWidth(180);
jTable1.getColumnModel().getColumn(3).setResizable(false);
jTable1.getColumnModel().getColumn(4).setPreferredWidth(80);
jTable1.getColumnModel().getColumn(4).setResizable(false);
jTable1.getColumnModel().getColumn(5).setPreferredWidth(80);
jTable1.getColumnModel().getColumn(5).setResizable(false);
jTable1.getColumnModel().getColumn(6).setPreferredWidth(80);
jTable1.getColumnModel().getColumn(6).setResizable(false);
jTable1.getColumnModel().getColumn(7).setPreferredWidth(80);
jTable1.getColumnModel().getColumn(7).setResizable(false);
jTable1.getTableHeader().setReorderingAllowed(false);
jTable1.setAutoResizeMode(jTable1.AUTO_RESIZE_OFF);
jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
Chama ele assim:
PreencherTabela("select * from Sua_tabela order by Data DESC")
Fiquei um pouco confuso…acho que é isso que vc quer quando cita: “Quando eu clico no botão registrar as informações são alteradas no banco de dados corretamente, ai fecho esta janela e fica a janela que tem a tabela, ai uso este método para tentar atualizar a tabela”
Não sei se é essa sua dúvida, mas se não for SORRY…
Obrigado pela ajuda, mas consegui resolver, só outra coisa como faço para deixar a resposta e marcar que foi resolvido?
disponibiliza a conteúdo da sua solução para compartilhar ela com os demais.
Eu fiz o seguinte dentro do botão alterar quando chama telaMenuMateriaMDI passei para seu construtor a linha, a coluna, e a materia;
if (tbMateria.getSelectedRow() > -1) {
coluna = tbMateria.getSelectedColumn();
linha = tbMateria.getSelectedRow();
materia = new ControleMateria().listar().get(linha); // pego as informações da lina e adiciona ao objeto matéria
TelaMenuMateriaMDI telaMenuMateriaMDI = new TelaMenuMateriaMDI(materia, linha, coluna);
area.add(telaMenuMateriaMDI);
telaMenuMateriaMDI.setVisible(true);
} else {
JOptionPane.showMessageDialog(null, "Selecione a matéria");
}
Lá na tela onde faço as alterações dados dentro do Construtor recebo a linha, a coluna e a matéria:
public TelaMenuMateriaMDI(Materia materia, int l, int c) {
initComponents();
this.status = true;
preecnherCampos(materia);
this.materia = materia;
linha = l;
coluna = c;
}
Já no método onde altero as informações fiz o seguinte:
if (status) {
String nomeMateria = txtMateria.getText();
String d = txtData.getText();
int id = materia.getId();
ControleMateria cMateria = new ControleMateria();
cMateria.alterar(nomeMateria, getData(d), id); // este método faz alteração dentro do meu banco
m.setNomeMateria(nomeMateria);
m.setData(getData(d));
TelaMenuTabelaMateriaMDI.tableModel.setValueAt(m, linha, coluna); // neste método que atualiza a tabela
}
Dentro da minha classe que implementa os Métodos do AbstractTableModel tenho o método responsável por alterar as informações e listar a alteração:
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
Materia m = lMateria.get(rowIndex);
// dependendo da coluna retornará o valor corretamente
switch (columnIndex) {
case 0:
m.setId(Integer.parseInt(String.valueOf(aValue)));
break;
case 1:
m.setNomeMateria(String.valueOf(aValue));
break;
case 2:
m.setData((LocalDate) aValue);
break;
}
// avisa que os dados mudram e lista novamente a tabela
fireTableDataChanged();
}
1 curtida