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?
privatevoidjLabelProjectsAddMouseClicked(java.awt.event.MouseEventevt){// TODO add your handling code here:ProjectDialogScreenprojectDialogScreen=newProjectDialogScreen(this,rootPaneCheckingEnabled);projectDialogScreen.setVisible(true);projectDialogScreen.addWindowListner(newWindowAdapter(){publicvoidwindowClosed(WindowEvente){loadProjects();}});}
Bom verifiquei e o codigo é esse mesmo, a ele é do Package model e é a classe Project
L
Lucas_Camara1 like
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.
A forma como o código dessa tableModel está feito, pode ser a causa do problema que vc está passando.
I
insany_boy
Obrigado, essa é a questão, eu ainda não fiz
L
Lucas_Camara
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?
I
insany_boy
Isso
L
Lucas_Camara
Agora, o que é essa variável projectModel? Se for de alguma classe que vc mesmo criou, pode postar o código dela?
I
insany_boy
Eu ja postei acima, a classe project
I
insany_boy
Estou desconfiado também que pode ser algo no save da minha classe Project Controller, será?
publicclassProjectController{publicvoidsave(Projectproject){Stringsql="INSERT INTO projects(name, "+"description, "+"createdAt, "+"updateAt) "+"VALUES (?, ?, ?, ?)";Connectionconnection=null;PreparedStatementstatement=null;try{connection=ConnectionFactory.getConnection();statement=connection.prepareStatement(sql);statement.setString(1,project.getName());statement.setString(2,project.getDescription());statement.setDate(3,newDate(project.getCreatedAt().getTime()));statement.setDate(4,newDate(project.getUpdateAt().getTime()));statement.execute();}catch(SQLExceptionex){thrownewRuntimeException("Erro ao salvar o projeto",ex);}finally{ConnectionFactory.closeConnection(connection,statement);}}
L
Lucas_Camara
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.
S
staroski1 like
Mas e a classe do objeto projectModel?
Imagino que seja a implementação de um ListModel, posta o fonte dela.
I
insany_boy
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
I
insany_boy
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
S
staroski
Acho que você não entendeu o que foi solicitado
L
Solucao aceita
Lucas_Camara1 like
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:
Vc pode tentar chamar o método loadProjects() da classe MainScreen, fazendo cast do parent recebido, logo após salvar o projeto:
try{Projectproject=newProject();project.setName(jTextFieldName.getText());project.setDescription(jTextAreaDescription.getText());controller.save(project);((MainScreen)getParent()).loadProjects();// tente adicionar essa linhaJOptionPane.showMessageDialog(rootPane,"Projeto salvo com sucesso");}catch(Exceptione){JOptionPane.showMessageDialog(rootPane,e.getMessage());}
Veja se isso funciona.
I
insany_boy
Muito obrigado, mesmo de verdade, um grande heroi, deu tudo certo aqui.
L
Lucas_Camara1 like
Apenas cuidado com essa solução, pq, caso essa mesma JDialog seja chamada por um JFrame diferente, provavelmente ocorrerá um erro no cast.