[code]private void addObra() {
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
TmObras = (DefaultTableModel) jTable1.getModel();
obras = session.createQuery("FROM Obra where codObra = " + jTextField4.getText().trim()).list();
exemplares = session.createQuery(“FROM Exemplar”).list();
while (TmObras.getRowCount() > 0) {
TmObras.removeRow(0);
}
if (obras.isEmpty()) {
JOptionPane.showMessageDialog(null, “Nenhum Obra encontrada.”);
} else {
String[] campos = new String[]{};
TmObras.addRow(campos);
for (int j = 0; j < obras.size(); j++) {
TmObras.setValueAt(obras.get(j).getCodObra(), j, 0);
TmObras.setValueAt(obras.get(j).getTitulo(), j, 1);
TmObras.setValueAt(obras.get(j).getNuExemplar(), j, 2);
//aqui estava tentando buscar o código do exemplar que faz parte da obra.
TmObras.setValueAt(exemplares.listIterator(3), j, 3);
}
}
session.close();
}
[/code]
Este método preenche a tabela, mas não da forma como eu quero, ou seja, preciso que a cada obra selecionada, eu possa adicioná-la na jtable, mas não é o que ocorre, ocorre o seguinte: quando seleciono código e insiro no jtable com ação de um botão ele vai, mas quando escolho um outro código para tbm ser adicionado ele simplesmente fica no lugar do primeiro.
Alguém sabe por que isto esta acontecendo?
Ajuda! \o/
Todas as vezes que você clicar no JButon ele vai criar um JTable, seta com o TableModel Defaut e popula com a query que pega da session. Então esta acontecendo exatamente o que você escreveu para acontecer.
O certo seria você criar o JTable fora do metodo addObra() e passa-lo como argumento, mais ou menos assim:
Dá erro na linha TmObras = (DefaultTableModel) jTable1.getModel(); diz que não foi encontrada a classe TmObras, sendo que TmObras é o nome de uma variável que defini como DefaultTableModel TmObras; lá no inicio dos metodos. Além disso, dá erro na linha table.addRow(campos);
Tem uma forma mais fácil de buscar a obra no banco e com um evento no botao adicionar na tabela e salvar no banco de dados?
Veja anexo a ideia. (Algo bem simples!)
O código a seguir é o evento de preencher a table, preenche direitinho, mas não preenche linha a linha, sempre atualiza a primeira linha.
[code]private void addObra(JTable jTable) {
Session session = HibernateUtil.getSessionFactory().openSession();
// session.beginTransaction();
exemplares = session.createQuery("FROM Exemplar where codExemplar = " + jTextField4.getText().trim()).list();
obras = session.createQuery(“FROM Obra”).list();
if (exemplares.isEmpty()) {
JOptionPane.showMessageDialog(null, “Nenhum Exemplar encontrado.”);
} else {
String[] campos = new String[]{null, null, null, null};
TmObras = (DefaultTableModel) jTable1.getModel();
TmObras.addRow(campos);
for (int j = 0; j < exemplares.size(); j++) {
try {
if (exemplares.get(j).getInConsulta() != 0) {
JOptionPane.showMessageDialog(null, “Não pode ser emprestado!”);
} else {
jTable.setValueAt(exemplares.get(j).getCodExemplar(), j, 0);
jTable.setValueAt(exemplares.get(j).getCodObra(), j, 1);
jTable.setValueAt(obras.get(j).getTitulo(), j, 2);
jTable.setValueAt(obras.get(j).getNuExemplar(), j, 3);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Este está com o campo InConsulta nulo! Por isso este erro: " + e);
}
}
}
session.close();
}[/code]
Ajuda! Este é um trabalho pra o final de curso. E estou iniciando nessa área. Tenho muito o que aprender.
Eu passei um pacote lá pra cima que abstrai essa dificuldade toda de se trabalhar com JTable, sinceramente nunca fiz uma aplicação com esta necessidade específica usando este pacote, mas acredito que lá tem uma solução para isto. Sugiro que você estudo a documentação do rs2xml.jar que lá deve ter um metodo para resolver isso bem facim…
Tem uma dica aqui mesmo no forum com este metodo (add) já pronto. Percebi que faltou você implementar alguns metodos no seu TableModel. Dá uma estudade neste link, ele vai de ajudar: