Tenho um método que serve para capturar o click duplo na JTable e então buscar o usuário no banco de acordo com o código na linha clicada, posteriormente enviar os parâmetros para outro JFrame afim de editá-los. O problema é que a conversão não acontece na linha do método Integer.parseInt(), segue abaixo:
private void clickDuplo(java.awt.event.MouseEvent evt) {
int linha;
int codigo;
//Verifica se o click na JTable é duplo, pega o código da linha para consultar o usuário
if(evt.getClickCount() == 2){
linha = tblUsuarioConsulta.getSelectedRow();
codigo = Integer.parseInt((String)tblUsuarioConsulta.getValueAt(linha, 0)); //A execução para aqui......
UsuarioCTR usuarioCTR = new UsuarioCTR();
List<Usuario> usuarios = usuarioCTR.consultaUsuarios(codigo);
for(Usuario usuario : usuarios){
new FrmUsuario().recebeUsuario(usuario.getCodigo(), usuario.getNome(), usuario.getLogin(), usuario.getSenha(), usuario.getConfirmaSenha(), usuario.getTipo());
}
}
}
Esse é o método que recebe os parâmetros, nem pude testar ainda já que a execução nem chega até aqui, postei mas para saber se há algo errado.
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at view.FrmUsuarioConsulta.clickDuplo(FrmUsuarioConsulta.java:291)
O método getValueAt retorna um objeto, então não tem porquê fazer cast de String pra depois usar parseInt, basta usar um cast direto ((int)tblUsuarioConsulta.getValueAt(x,y)), eu acredito. Tente fazer o que eu disse e o que o jefersonpo dizemos, se algum der certo, dê feedback
Bom pessoal quanto a conversão parece ter funcionado, mas me surgiu outro problema agora. A execução não entra no “for”… está correto a forma que estou passando os parâmetros para outro JFrame???
Não entendi direito.
Pelo que vc postou no cófigo, vc tá fazendo um new FrwmUsuario passando os parametros, e dentro deste form, vc faz de novo um outro new FrmUsuario, sem parametros, e mandando aparecer.
Então, se vc conseguiu encontrar o usuário, melhor vc fazer o seguinte:
frmUsuario = new FrmUsuario();
frmUsuario.setUsuario(Usuario u);
frmUsuario.setVisible(true);
Dentro do FrmUsuario, vc, pega o usuario passado e seta os itens.
Uma outra opção é vc passar o usuario no construtor do FrmUsuario. Assim, ficaria mais limpo o código.
Vou aproveitar o tópico pra tirar umas dúvidas quanto ao meu modelo mvc, se alguém puder dar um olhada, agradeço. Na realidade quero saber se está correto como estou implementando.
Primeiro quanto a estrutura do meu projeto que é essa:
Agora com relação ao projeto mesmo, vou postar os fontes pra ficar mais fácil.
Na view tenho:
private void clickDuplo(java.awt.event.MouseEvent evt) {
int linha;
int codigo;
//Verifica se o click na JTable é duplo, pega o código da linha para consultar o usuário
if(evt.getClickCount() == 2){
linha = tblUsuarioConsulta.getSelectedRow();
codigo = (int)tblUsuarioConsulta.getValueAt(linha, 0);
UsuarioCTR usuarioCTR = new UsuarioCTR();
Usuario usuario = usuarioCTR.consultaUsuarios(codigo);
//passando usuarios para o frame de edição (FrmUsuario)
FrmUsuario frmUsuario = new FrmUsuario();
frmUsuario.recebeUsuario(usuario);
frmUsuario.setVisible(true);
}
}
public Usuario consultaUsuarios(int codigo){
Usuario usuario = new Usuario();
try{
//String sql = "SELECT * FROM usuarios WHERE usu_codigo = ?";
PreparedStatement stmt = this.connection.prepareStatement("SELECT * FROM usuarios WHERE usu_codigo = ?");
stmt.setInt(1, codigo);
ResultSet rs = stmt.executeQuery();
while(rs.next()){
usuario.setCodigo(rs.getInt("usu_codigo"));
usuario.setNome(rs.getString("usu_nome"));
usuario.setLogin(rs.getString("usu_login"));
usuario.setSenha(rs.getString("usu_senha"));
usuario.setConfirmaSenha(rs.getString("usu_confirmarSenha"));
usuario.setTipo(rs.getString("usu_tipo"));
}
rs.close();
stmt.close();
}catch(SQLException erro){
erro.printStackTrace();
System.out.println(erro.getMessage());
}
return usuario;
}
No model tenho uma classe normal com campos de Usuários e métodos getters e setters.
2 - Algo de errado com relação ao modelo MVC??
3 - O correto de fazer validações de um campo do formulário é no modelo, ou na própria view??
Bom coloquei exemplos de métodos que fazem consultas, talvez algumas coisas seja meio óbvio pra vocês, mas é que me sinto meio inseguro ao implementar.
Do meu ponto de vista esta correto.
Com relacao à distribuicao de pctes, nao acho que exista um padrao. O que importa eh que vc entenda a ideia e a importancia do mvc, adapte para sua especificidade e implemente como tal.
Qto a validacao de itens da view, o melhor para trata-las eh na propria view. Assim como nao eh responsabilidade da view conhecer os detalhes de implem. das outras camadas, a reciproca tb deve ser verdadeira.
Deixando claro, itens da view, exemplo field vazio, maskaras e coisa e tal. Se, for, porexemplo, validsr slgum item de um bean, ja passa de sua responsabilidade. Deixe as views se responsabilizar por seus componentes.
Que bom que pude lhe ajudar. Estou um tanto enferrujado. Mas vamos la.
Abcs.