[RESOLVIDO]Alterar jTextField através de outra classe
8 respostasResolvido
Vinicius_Costa1
Bom dia,
Como eu altero através da classe x, um jTextField que está no JForm y? Eu sei acessar o valor do jTextField, mas não sei usar o set para alterar o valor do jTextField. Pra acessar faço o seguinte:
Vc pode fazer a opção de deixar o campo da nova Janela como static, ou fazer o esquema de parent, mas a nova Janela precisa ter um construtor referente a classe que estará chamando. Exemplo
Obrigado pela resposta, mas não entendi o que deve ser feito.
Pra exemplificar minha dúvida:
Eu tenho este jTextField que fica em uma classe chamada Atualizar
Preciso escrever algo dentro desse jTextField através de uma classe chamada AtualizarController.
Se o jTextField tivesse dentro da classe AtualizarController, eu simplesmente faria: jTextField.setText("escrita");
Porém como faço esse comando acima a partir de outra classe?
I
Iohannes
Mas qual será o evento de disparo? Suponto que o envio ocorre por meio de um botão:
Vou colocar o código pra ser mais assertivo. O código abaixo está dentro da classe AtualizarFichaDAO
publicbooleanselectColocarInformacoesNaTela(StringcodigoProc){AtualizarFichatela=newAtualizarFicha();StringsqlSelect="SELECT * FROM ficha WHERE codigo = ?";PreparedStatementstmt=null;ResultSetrs=null;try{stmt=con.prepareStatement(sqlSelect);//Abre uma preparação instrução SQL para enviar ao bancostmt.setString(1,codigoProc);//Preenche valor ?rs=stmt.executeQuery();//Envia SQL preenchido para bancowhile(rs.next()){StringnomeColchao=rs.getString("nomecolchao");Stringcodigo=rs.getString("codigo");StringsuportePeso=rs.getString("suportepeso");StringpillowEuro=rs.getString("pilloweuro");byte[]imagem=rs.getBytes("imagem");}returntrue;}catch(SQLExceptionex){JOptionPane.showMessageDialog(null,"Erro: "+ex);returnfalse;}}
Eu preciso colocar as informações resgatadas do banco de todas as variáveis (nomeColchao, codigo, suportePeso, pillowEuro, imagem) em diferentes jTextFields que ficam em outra classe chamada AtualizarFicha. Segue imagem dos lugares que tem de serem preenchidos com aquelas variáveis da classe AtualizarFichaDAO:
I
Iohannes
Não entendi… o método retornar um booleano? Não deveria retornar um objeto do tipo ‘AtualizarFicha’ ou no mínimo uma lista do tipo String? Como pretende recuperar os dados se o método não tem o tipo de retorno adequado?
Vinicius_Costa1
Mas se eu retornar um objeto por exemplo do tipo ‘AtualizarFicha’, quando eu for preencher os jTextFields, vou ter que executar este método toda hora até preencher todos os jTextsFields(são 39 ao todo), fora isso tem outras complicações também. Pelo menos eu não tive lógica pra pensar uma forma que resolvesse este problema. Acabei deixando fora do padrão MVC, criei o método ‘selectColocarInformacoesNaTela’ diretamente no jForm e não mais dentro da classe AtalizarFichaDAO, porque ai através disso, consigo usar o comando ‘jTextField.setText()’ sem problemas.
De qualquer forma, agradeço a ajuda.
I
Solucao aceita
Iohannes
É para casos como estes que existem as variáveis globais… Você pode criar um método que preencha todos os campos e que receba como parâmetro uma variável global. Daí tu pode ‘descarregar’ os dados na variável global apenas uma vez, por exemplo, quando a tela é aberta. Exemplo:
1 - Tela do pacote view
/**Variávelglobal*/privatebean.AtualizarFichaficha;/**Métodochamadonainicializaçãoparapreencheraficha*/privatevoidcarregarDados(){try{ficha=dao.AtualizarFicha.pesquisarDados();}catch(SQLExceptionsqle){System.out.println("Impossível carregar os dados!");}}/**Métodoresponsávelporpreencheroscamposcomasinformaçõesdaficha*/privatevoidpreencherCampos(bean.AtualizarFichaficha){jTextField1.setText(ficha.getCampo1());jTextField2.setText(ficha.getCampo2());{...}jTextFieldk.setText(ficha.getCampok());{...}jTextField39.setText(ficha.getCampo39());}
2 - Método pesquisarDados da classe AtualizarFicha do pacote dao
publicclassAtualizarFicha{publicstaticbean.AtualizarFichapesquisarDados()throwSQLException{bean.AtualizarFichaficha=newAtualizarFicha();try(ConnectionconectaBancoDeDados=ConectaBancoDeDados.getConexao()){StringstrSQLPesquisa="SELECT * FROM ficha WHERE codigo = ?";try(PreparedStatementpstmt=conectaBancoDeDados.preparedStatement(strSQLPesquisa)){try(ResultSetrstSet=pstmt.executeQuery()){rstSet.first();ficha.setCampo1(rstSet.getLong("codigo_ficha"));ficha.setCampo2(rstSet.getTipoDados("campo2"));{...}ficha.setCampo39(rstSet.getTipoDados("campo39"));}}}returnficha;}}
No caso, se for retornado somente uma ficha. Caso sejam várias, tu pode usar uma lista…