A interface não está salvando os projetos

Eu estou tentando fazer com que essa interface salve automaticamente os projetos que eu registro (os que estão de vermelho) nessa tela, só que eles só aparecem quando eu saio do projeto e entro de novo e não na hora quando eu registro. eu fiz o código corretamente, mas será que faltou algum detalhe no meu método?

 private void jLabelProjectsAddMouseClicked(java.awt.event.MouseEvent evt) {                                               
        // TODO add your handling code here:
        ProjectDialogScreen projectDialogScreen = new ProjectDialogScreen(this, rootPaneCheckingEnabled);
        projectDialogScreen.setVisible(true);
        
        projectDialogScreen.addWindowListner(new WindowAdapter(){        
           public void windowClosed(WindowEvent e){
               loadProjects();
           }
        });
    }  
public void loadProjects(){
        List<Project> projects = projectController.getAll();
        
        projectModel.clear();       
        
        for (int i = 0; i < projects.size(); i++){           
            Project project = projects.get(i);            
            projectModel.addElement(project);       
        }
       jListProjects.setModel(projectModel);      
    }

Como vc está implementando a parte de salvar?

Os que tão no codigo são os que eu sei pra salvar na tela mas você quer os do banco?

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.

1 curtida

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.

1 curtida

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