Acho que entendi. Ao adicionar o projeto no model (que é em memória) não está aparecendo. Se for isso, precisaria postar o código da sua model.
Esse é o model project, que é a parte que to tentando fazer o salvamento
package model;
import java.util.Date;
public class Project {
private int id;
private String name;
private String description;
private Date createdAt;
private Date updateAt;
public Project(int id, String name, String description, Date createdAt, Date updateAt) {
this.id = id;
this.name = name;
this.description = description;
this.createdAt = createdAt;
this.updateAt = updateAt;
}
public Project() {
this.createdAt = new Date();
this.updateAt = new Date();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
public Date getUpdateAt() {
return updateAt;
}
public void setUpdateAt(Date updateAt) {
this.updateAt = updateAt;
}
@Override
public String toString() {
return this.name;
}
Digo o model da JTable
referente à essa linha:
projectModel.addElement(project);
Onde acho isso? ja que é a “memoria”
Bom verifiquei e o codigo é esse mesmo, a ele é do Package model e é a classe Project
Quando uma tabela JTable
é usada, é necessário informar uma TableModel
para fazer com que os dados sejam apresentados na tabela. E essa tableModel
pode ser criada de mais de um jeito, ou criando uma DefaultTableModel
ou extendendo AbstractTableModel
.
Por exemplo: DefaultTableModel model - Mostrar valores - #2 por Lucas_Camara
A forma como o código dessa tableModel
está feito, pode ser a causa do problema que vc está passando.
Obrigado, essa é a questão, eu ainda não fiz
Ah cara, falha minha tb. Agora que reparei a variável jListProjects
. Vc não está usando JTable
, mas um JList
.
O seu problema é que os elementos novos não estão aparecendo nesse JList
, certo?
Isso
Agora, o que é essa variável projectModel
? Se for de alguma classe que vc mesmo criou, pode postar o código dela?
Eu ja postei acima, a classe project
Estou desconfiado também que pode ser algo no save da minha classe Project Controller, será?
public class ProjectController {
public void save(Project project) {
String sql = "INSERT INTO projects(name, "
+ "description, "
+ "createdAt, "
+ "updateAt) "
+ "VALUES (?, ?, ?, ?)";
Connection connection = null;
PreparedStatement statement = null;
try {
connection = ConnectionFactory.getConnection();
statement = connection.prepareStatement(sql);
statement.setString(1, project.getName());
statement.setString(2, project.getDescription());
statement.setDate(3, new Date(project.getCreatedAt().getTime()));
statement.setDate(4, new Date(project.getUpdateAt().getTime()));
statement.execute();
} catch (SQLException ex) {
throw new RuntimeException("Erro ao salvar o projeto", ex);
} finally {
ConnectionFactory.closeConnection(connection, statement);
}
}
Como é um insert
, tente utilizar o método executeUpdate()
, em vez do execute()
, do PreparedStatement
:
statement.executeUpdate();
E verifique se o código está lançando alguma exceção tb. Outra coisa, após executar o salvar, verifique se o registro está aparecendo no banco de dados.
Mas e a classe do objeto projectModel
?
Imagino que seja a implementação de um ListModel
, posta o fonte dela.
Eu tentei mas mesmo assim não funcionou e ta tudo funcionando no banco :(, registra la, mas não registra no meu projeto :(, olha eu deixei um pouco dele no github. GitHub - insany-boy/todo-app, se puder da uma olhada, agradecerei muito pq preciso MUITO entender esse projeto
são todas variadas do projectModel, olha eu deixei um pouco dele no github GitHub - insany-boy/todo-app. Se puder me ajudar, vou agradecer MUITOO, de verdade
Acho que você não entendeu o que foi solicitado
Pelo que vi no seu código. Quando a ação de salvar for executada na dialog
, vc precisaria forçar a atualização do componente JList
no frame MainScreen
.
Uma forma que vi, seria utilizar o parent
recebido no construtor do ProjectDialogScreen
:
public ProjectDialogScreen(java.awt.Frame parent, boolean modal) {
super(parent, modal);
Vc pode tentar chamar o método loadProjects()
da classe MainScreen
, fazendo cast do parent recebido, logo após salvar o projeto:
try {
Project project = new Project();
project.setName(jTextFieldName.getText());
project.setDescription(jTextAreaDescription.getText());
controller.save(project);
((MainScreen) getParent()).loadProjects(); // tente adicionar essa linha
JOptionPane.showMessageDialog(rootPane, "Projeto salvo com sucesso");
} catch (Exception e) {
JOptionPane.showMessageDialog(rootPane, e.getMessage());
}
Veja se isso funciona.
Muito obrigado, mesmo de verdade, um grande heroi, deu tudo certo aqui.
Apenas cuidado com essa solução, pq, caso essa mesma JDialog
seja chamada por um JFrame
diferente, provavelmente ocorrerá um erro no cast.