Problemas com implementação

10 respostas
A

E ae galera blz!

Estou trabalhando com java para desktop e no projeto que estou desenvolvendo estou com dois problemas, são os seguintes:

  1. Eu tenho uma classe chamada Form1 e nela eu tenho um TextFiels chamado fatura. Nessa classe deixei um método públic para capturar o valor do TextField dessa forma:
public String getFatura()
    {
     String fatura2 = fatura.getText();
     return fatura2;
    }

2)Tenho uma outra class chamada Form2 nessa class eu estou implementado a class Form1 e quero capturar o valor do TextField fo Form1, dessa forma:

Form1 valor = new Form1();
String fatura = valor.getFatura();
Label1.setTex(fatura);

O Problema é que o valor não esta vindo esta ficando em branco. A idéia é que eu abra o form1, preencha o TextField e quando eu abrir o form2 o valor do Textfield do form um vai aparecer em uma Label do form 2. Porém a Label esta ficando vazia.
fiz um teste jogando valor direto no getFatura e funcionou normal, tipo assim:

public String getFatura()
    {
     String fatura2 = "teste";
     return fatura2;
    }

Dessa forma eu abro o Form1 e quando abro o Form2 ele captura o valor normalmente executa numa boa.
Porque que quando eu defino o valor direto ele captura e quando eu mando pegar do TextField fica vazio?
Alguém pode me corrigir? Tentei pegar o valor direto dessa forma:

Form1 valor = new Form1();
String fatura = valor.fatura.getText();

Mas desse Jeito deu pau!
Onde estou errando?

10 Respostas

C

Ola…

Bem… deixa eu ver c entendi a sua necessidade, tu tem um form X, q tem um campo, qdo abrir o formY, quer pegar o texto do formX, é isso ?
Se a resposta for sim faca a seguinte maneira…

Coloque uma action no seu Form, quando ocorrer o evento de fechar a janela, tu passe para o seu controler o conteudo daquela variavel, a sim, depois tu pod setar ela no seu outro campo, ok ?

O valor esta vindo vazio, pq o form1 esta fechado.

A

E aí cara blz!

Então eu não fecho o form1 ele fica aberto, tipo assim eu abro o form1 preencho o TextField e depois abro o form2 (deixando o form1 aberto) para capturar o valor que esta no TextField do form1.
Aí ele captura o valor vazio!
Essa é a váriável que captura a informação do TextField e ela fica dentro do form1 mesmo:

public String getFatura() 
    { 
     String fatura2 = fatura.getText(); 
     return fatura2; 
    }

E esse é o código no form2 que vai recerbe a valor do textfield já captura mesmo no próprio form1:

Form1 valor = new Form1(); 
String fatura = valor.getFatura(); 
Label1.setTex(fatura);

E eu não fecho o form1! Agora se eu deixar o código do form1 sem capturar o valor do Textfield e definir um valor fixo ele funciona, tipo assim:

public String getFatura() 
    { 
     String fatura2 = "teste";
     return fatura2; 
    }

aí o código do form2 captura numa boa, assim:

Form1 valor = new Form1(); 
String fatura = valor.getFatura(); 
Label1.setTex(fatura);

O problema esta no código do form1 que não esta capturando o valor do TextField.
Onde será que estiu errando?

FieroddPJ

Cara, em que momento vc esta chamando o metodo getFatura()?
eu estou achando q vc esta chamando o metodo quando o textField ainda esta vazio, ai ele grava “” na variavel, se vc deixar a variavel com um valor fixo funciona pois vc ja setou o valor dela … da uma olhada e veja se não é algo do tipo

C

IDEM!

A

E ae pessoal, valeu pela força que vcs estão me dando!

então já tentei de tudo e não consigo capturar essa variável! Como assim eu estou chamando o método quando o Textfield ainda esta vazio.
Olha como esta meu código
Fom1:

private javax.swing.JTextField fatura;

public String getFatura()
{
        
         f = fatura.getText();
        return f ;
}

Form2:

Form1 valor = new Form1();
String fatura = valor.getFatura();
Label1.setTex(fatura);

Eu fiz até um teste com listener, fiz assim:

...
  fatura.addFocusListener(new FocusListener() 
       {
            public void focusLost(FocusEvent e) 
            {
                Texte();
            }

            public void focusGained(FocusEvent e) 
            {
                
            }
        }); 
...
 public void Texte()
    {
        
         f = fatura.getText();
         
    }
    public String getFatura()
    {
               
         return f ;
    }
Form1 valor = new Form1();
String fatura = valor.getFatura();
Label1.setTex(fatura);

O estranho é que seu setar o valor do TextField em JLabel no
Form1 a variável aparece, tipo assim

...
  fatura.addFocusListener(new FocusListener() 
       {
            public void focusLost(FocusEvent e) 
            {
                Texte();
            }

            public void focusGained(FocusEvent e) 
            {
                
            }
        }); 
...
 public void Texte()
    {
        
         f = fatura.getText();
         
    }
    public String getFatura()
    {
        
         
         Label1.setText(f)
         return f ;
    }
Form1 valor = new Form1();
String fatura = valor.getFatura();
Label1.setTex(fatura);

A label aparece com o valor do TextField, mas quando abro o Form2 (sem fechar o Form1) A Label do Form2 fica vazia!
Se a JLabel do form1 que setei no evento capturou o valor de f, acredito que f não esta vazia porém no Form2 ela chega vazia.
Preciso de ajuda já fiz de tudo e isso não funciona.
Como resolvo isso?

A

E ae cara blz!

Estou tentando fazer de um modo diferente para tentar ecertar esse erro que não consigo arrumar. Olha como estou fazendo agora:
Frame principal:

...
public class Nota extends javax.swing.JFrame {
   private JDesktopPane jDesktopPane1; 
   private JDesktopPane d;
    /** Creates new form Nota */
    public Nota() {
        initComponents();
    }
    
 private void SalvarNotaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
        dispose(); 
        d.add(new FormSalvar(jTextField1.getText()));

    }

    private void CriarNotaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
      jDesktopPane1.add(new FormNota(jDesktopPane1));  
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Nota().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify
    private javax.swing.JMenuItem CriarNota;
    private javax.swing.JMenuItem SalvarNota;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenuBar jMenuBar1;
    // End of variables declaration
    
}

O form1:

public class FormNota extends javax.swing.JInternalFrame {
    
    /** Creates new form FormNota */
    JDesktopPane d;
    public FormNota(JDesktopPane desk) 
    {
        initComponents();
        d = desk;
        this.setVisible(true);
      

    }
    
  // Variables declaration - do not modify
    private javax.swing.JTextField jTextField1;
    // End of variables declaration
    
}

Form2:

public class FormSalvar extends javax.swing.JInternalFrame {
    
    /** Creates new form FormSalvar */
    public FormSalvar(JDesktopPane desk) 
    {
        initComponents();
    }

    // Variables declaration - do not modify
    private javax.swing.JLabel jLabel1;
    // End of variables declaration
    
}

O Frame principal onde esta o menus de opções esta dando erro nessa linha:
d.add(new FormSalvar(jTextField1.getText()));. Porém se eu tirar esse linha ele executa mas quando eu clino no menu para carregar o form1 onde esta o textfileld, ele não carrega nada.

Os outros forms não apresentam erros!
O problema é que não consigo abrir os forms por causa da linha que esta dando erro no frame princicipal mas se tiro a linha ele executa mas não abre os outos frames! Onde estou errando?

A

Será que o erro esta na hora que eu abro o internalframe?

B

Cara, vc está fazendo o seguinte:
Vc tem o Form1, vc instancia ele e o Form aparece na janela do usuário.
Qdo vc vai abrir o Form2, vc está criando uma NOVA instancia da Form1, essa nova instancia tem as variáveis todas novas, essa nova instancia não contém os mesmos valores do primeiro form do usuário (o form que o usuário preencheu), então no Form2 qdo vc usa o método do form1 para retornar o valor do textfield, o valor da var q ele pega é diferente do valor que o usuário realmente está preenchendo. Qdo vc setou a variável para mostrar um valor constante (na hora q vc fez return “teste”) funcionou pq vc está passando um valor constante. Entendeu o seu erro?!?
Tenta fazer o seguinte:

...
public class Nota extends javax.swing.JFrame {
   private JDesktopPane jDesktopPane1;
   private JDesktopPane d;
    /** Creates new form Nota */
    public Nota() {
        initComponents();
    }
   
 private void SalvarNotaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
        dispose();
        d.add(new FormSalvar(jTextField1.getText()));

    }

    private void CriarNotaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
      //TENTANDO ARRUMAR O ERRO
      formularioAberto = new FormNota(jDesktopPane1); //guardando a instancia q esta sendo apresentado ao usuario...
      jDesktopPane1.add(formularioAberto); 
    }
   
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Nota().setVisible(true);
            }
        });
    }
   
    // Variables declaration - do not modify
    private javax.swing.JMenuItem CriarNota;
    private javax.swing.JMenuItem SalvarNota;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenuBar jMenuBar1;

    //TENTANDO ARRUMAR O ERRO
    private FormNota formularioAberto;

    // End of variables declaration
   
}

Form1 - Continuou o mesmo:

public class FormNota extends javax.swing.JInternalFrame {
   
    /** Creates new form FormNota */
    JDesktopPane d;
    public FormNota(JDesktopPane desk)
    {
        initComponents();
        d = desk;
        this.setVisible(true);
     

    }
   
  // Variables declaration - do not modify
    private javax.swing.JTextField jTextField1;
    // End of variables declaration
   
}

Form2 - Mudou…

public class FormSalvar extends javax.swing.JInternalFrame {
   
    /** Creates new form FormSalvar */
   //TENTANDO ARRUMAR O ERRO
    public FormSalvar(JDesktopPane desk, FormNota formNota)
    {
        initComponents();
        //TENTANDO ARRUMAR O ERRO
        instanciaAberta = formNota;
    }

    // Variables declaration - do not modify
    private javax.swing.JLabel jLabel1;
   //TENTANDO ARRUMAR O ERRO
    private FormNota instanciaAberta;
    // End of variables declaration
   
}

Oq eu mudei estah comentado assim: //TENTANDO ARRUMAR O ERRO
Bom, daí no Form2, vc usa o objeto instanciaAberta ao invés de instanciar um novo objeto de Form1. Assim vc conseguirá obter oq o usuário digitou…

Entendeu?!?
Abraços…

A

Entendi cara, estou recarregando o form por isso ele passa valor vazio!
Estou testando aqui mas ainda esta dando erro nessa linha:

d.add(new FormSalvar(jTextField1.getText()));

Que fica no form principal onde estão os menus esta dando essa msn:

Porque cara! Sendo que o campo jTextField1 existe?

Porém se eu comentar essa linha que esta dando erro e executar o programa ele vai dar erro nessa linha:
jDesktopPane1.add(formularioAberto);
com essa msn:

Onde estou errando?

A

Resolvi os problemas acima, porém ainda não consigo capturar os valores.
O estranho é que em vb eu consigo fazer isso. Ou seja Frame principal com o menu de opções. a primeira opção do menu abre o form1 com as textfields, preencho as mesmas. depois abro o menu do frame principal clico na segunda opção ele abre o segundo form e captura as informações que estão digitadas.

Deve ter algum modo em java, vou pesquisar mais. Eu acho que tem porque se eu deixo TextField definido com um valor padrão ao invés de vazio, quando eu clico na segunda opção do menu do Frame principal ele abre o form2 e exibe o valor do textfield que estava definifo como padrão. Mesmo que eu tenha digitado outra coisa no textfield. Deve ser o modo que estou capturando ele esta pegando os valores padrão do form1 e não o que esta sendo digitado na hora.

Vou continuar pesquisando, mas preciso da ajuda de vcs. Se alguém conseguir ou tiver alguma idéia posta aí.

Criado 9 de agosto de 2006
Ultima resposta 25 de ago. de 2006
Respostas 10
Participantes 4