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:
String recebeValor;
ClasseY y = new ClasseY();
recebeValor = y.getjTextField().getText();
Como faço pra alterar o valor do jTextField?
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
public Frame1(){...}
public Frame2(Frame1 parent){...}
Pra chamar vc coloca o this
Frame2 frame = new Frame2(this);
String blabla = frame.campoDeLa.getText();
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?
Mas qual será o evento de disparo? Suponto que o envio ocorre por meio de um botão:
1 - Tela Atualizar
public class Atualizar extends javax.swing.JFrame {
private AtualizarController telaAtualizarController;
private void btnAtualizarActionPerformed(java.awt.event.ActionEvent evt) {
if(telaAtualizarController == null){
telaAtualizarController = new TelaAtualizarController();
telaAtualizarController.setVisible(true);
telaAtualizarController.setLocationRelativeTo(this);
}else{
telaAtualizarController.setVisible(true);
telaAtualizarController.setLocationRelativeTo(this);
telaAtualizarController.setState(NORMAL);
}
telaAtualizarController.carregarValor(txtTela1.getText().trim());
}
{...}
private javax.swing.JTextField txtTela1;
}
2 - TelaAtualizarController
public class AtualizarController extends javax.swing.JFrame {
protected void carregarValor(String valor){
txtTela2.setText(valor);
}
{...}
private javax.swing.JTextField txtTela2;
}
Não resolve?
Vou colocar o código pra ser mais assertivo. O código abaixo está dentro da classe AtualizarFichaDAO
public boolean selectColocarInformacoesNaTela(String codigoProc) {
AtualizarFicha tela = new AtualizarFicha();
String sqlSelect = "SELECT * FROM ficha WHERE codigo = ?";
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = con.prepareStatement(sqlSelect); //Abre uma preparação instrução SQL para enviar ao banco
stmt.setString(1, codigoProc); //Preenche valor ?
rs = stmt.executeQuery(); //Envia SQL preenchido para banco
while (rs.next()) {
String nomeColchao = rs.getString("nomecolchao");
String codigo = rs.getString("codigo");
String suportePeso = rs.getString("suportepeso");
String pillowEuro = rs.getString("pilloweuro");
byte[] imagem = rs.getBytes("imagem");
}
return true;
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro: " + ex);
return false;
}
}
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:

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?
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.
É 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ável global
*/
private bean.AtualizarFicha ficha;
/*
* Método chamado na inicialização para preencher a ficha
*/
private void carregarDados(){
try{
ficha = dao.AtualizarFicha.pesquisarDados();
}catch(SQLException sqle){
System.out.println("Impossível carregar os dados!");
}
}
/*
* Método responsável por preencher os campos com as informações da ficha
*/
private void preencherCampos(bean.AtualizarFicha ficha){
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
public class AtualizarFicha{
public static bean.AtualizarFicha pesquisarDados() throw SQLException{
bean.AtualizarFicha ficha = new AtualizarFicha();
try(Connection conectaBancoDeDados = ConectaBancoDeDados.getConexao()){
String strSQLPesquisa = "SELECT * FROM ficha WHERE codigo = ?";
try(PreparedStatement pstmt = conectaBancoDeDados.preparedStatement(strSQLPesquisa)){
try(ResultSet rstSet = pstmt.executeQuery()){
rstSet.first();
ficha.setCampo1(rstSet.getLong("codigo_ficha"));
ficha.setCampo2(rstSet.getTipoDados("campo2"));
{...}
ficha.setCampo39(rstSet.getTipoDados("campo39"));
}
}
}
return ficha;
}
}
No caso, se for retornado somente uma ficha. Caso sejam várias, tu pode usar uma lista…
Deu certo, obrigado irmão!