Estou quebrando a cabeça há uns dois dias com esse problema …
Tenho um código com duas classes.
A primeira tem um JTextField declarado da seguinte maneira :
private javax.swing.JTextField hora_branco;
Nessa mesma classe , criei um método chamado
public void MudaHoraBranco()
{
hora_branco.setText("Ola");
}
Quando eu chamo esse método por outros métodos dessa mesma classe , o campo muda direitinho …
Agora quando eu chamo esse método por métodos da outra classe o campo simplesmente não muda…
Eu já tentei mudar o modificador da váriavel para público e não funcionou …
Alguem saberia uma saída para essa sinuca?! :lol: obrigado desde já !
package teste;
import javax.swing.JOptionPane;
public class Relogio extends javax.swing.JFrame
{
public Relogio()
{
initComponents();
}
//Aplicar_confs é o nome de um botao que quando clicado , passa direitinho a hora para o JTEXTFIELD
private void Aplicar_ConfsActionPerformed(java.awt.event.ActionEvent evt) {
//repassa para tela a hora
SetHora();
}
public void SetHora()
{
hora_branco.setText("Texto que eu quero que apareça");
}
public static void main(String args[])
{
java.awt.EventQueue.invokeLater(new Runnable()
{
public void run()
{
new Relogio().setVisible(true);
}
}
);
}
public javax.swing.JTextField hora_branco;
}
Até ai tudo bem , eu clico no botao e tudo funciona direitinho …
O PROBLEMA É QUANDO EU CHAMO O MÉTODO NA OUTRA CLASSE …
package teste;
import javax.swing.JOptionPane;
public class ConfiguracaoJDialog extends javax.swing.JDialog {
/** Creates new form ConfiguracaoJDialog */
public ConfiguracaoJDialog() {
initComponents();
}
private void botaoaplicarMouseClicked(java.awt.event.MouseEvent evt) {
try {
Relogio relogio = new Relogio();
relogio.SetHora(); // esse cara deveria escrever no JTextField , mas não escreve ... PQ ?!!?!?!?!?
}
catch (Exception erro)
{
JOptionPane.showMessageDialog(null, "Erro", "Erro", JOptionPane.ERROR_MESSAGE);
}
dispose(); //matando o Jframe
}
}
Quando eu crio uma nova instância da classe relógio eu crio na verdade novas variáveis (no meu caso um novo JTEXTFIELD) de mesmo nome , com as mesmas características da classe original. Então alterar os valores nessa nova instância não altera os valores na instância anterior…
Agora a pergunta que vai resolver o meu problema ( Se for esse o problemas mesmo ehhe )
como alterar o valor do JtextField (sem faze-lo público) a partir de um classe de q não seja a classe que contém o JtextField?
Eu acho que usar set e get não vai rolar , pq para usa-los eu tenho que instanciar a classe que contém o jtextfield , logo criaria um NOVO jtextfield, o que não soluciona meu problema :
Cara teoricamente o que vc fez esta certo, mas ele realmente ira alterar o JText da instancia que vc criou
Relogio relogio = new Relogio();
relogio.SetHora();
Com isso vc esta se referindo a nova, o que vc pode fazer, se eu realmente endendi direito o que vc quer é tentar passar como parametro a instancia do objeto que vc quer apagar no lugar de criar um novo.
tive uma sacada que resolveu o problema mas empobreceu o programa…
eu chamo primeiro a classe das configuração , e só quando ela tiver terminada é que eu construo a classe do relógio , assim evita eu ter que ficar passando parâmetros para uma instância que já existe, pois eu crio a instância do relógio na hora me que eu vou precisar dela …