E ae galera blz!
Estou trabalhando com java para desktop e no projeto que estou desenvolvendo estou com dois problemas, são os seguintes:
- 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?
Form1 valor = new Form1();
String fatura = valor.getFatura();
Label1.setTex(fatura);
para pegar o valor do TextField é o getText() mesmo.
Nao sei como voce esta organizando as suas classes, porém voce tem que recuperar os valores dos campos da tela ao tratar os eventos, repassando de alguma forma os valores para a outra tela.
Tem como vc postar as 3 classes : Main, Form1 e Form2
Abraços
E aí caras blz!
Então vou explicar melhor 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?
É pq vc ta criando um objeto novo toda hora.
Faz o seguinte:
No construtor do seu form2, vc vai passar seu form1
[code]
public Form1 extends JFrame {
public String getValor() {
return f.getText();
}
private JTextField f;
}
public Form2 extends JFrame {
public Form2( Form1 f ) {
// obtém a referência para o form1 q vc criou (apenas uma vez)
form1 = f;
}
// agora sempre quando vc chamar form1.getValor() vc vai pegar
// o valor do text field do seu Form1, sem ficar criando novos objetos.
private Form1 form1;
}[/code]
E ae pessoal, valeu pela força que vcs estão me dando! Tentei o modo que o
davidbuzatto mas não entendi, não consegui fazer ainda, 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?
Vc usa netbeans kra?
Se sim fala ae q já faço pro c!
Bem, fiz 3 classes no netbeans, tirei do projeto e zipei para vc ver
da uma olhada, é só compilar e executar a Main.clas
Falow!
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?
Será que o erro esta na hora que eu abro o internalframe?
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í.
Não entendi.
Vc esta em um form e faz a instancia do mesmo?