Bom Dia, como sou novato em java me deparo com um problema, que para muitos deve ser algo bobo.
criei um controle de conta corrente basico, meu problema é o seguinte…criei um Frame"Entrada de Dados" onde recebo os valores A e B e tenho outro Frame “Extrato”, ao clicar no botão visualizar gostaria de mostrar estes valores, e não consigo, alguma diva por favor ?
Existem várias formas de fazer isso. Pode chamar outro frame e montar uma tabela para visualização. Em vez da tabela , pode criar uma textArea para mostrar, pode usar o jasperReport para visualização do relatório e talvez uma posterior impressão. Pode também usar um EditorPane e mostrar o seu extrato em formato html… enfim…
MEU problema não é no modo de visualizar, se coloquei dessa forma desculpe. o problema é pegar os valores digitado nas jTextFieldA e jTextFieldB que fazem parte da frame Entrada de Dados, e mostrar atraves de JOptionPane.showMessageDialog por exemplo…so que dentro de outro Frame…não sei se fui mais claro agora.
//1) - pegar os valores dos textField
String valorA = jTextFieldA.getText();
String valorB = jTextFieldB.getText();
Certamente este outro frame está numa outra classe …certo?
Se sim, adicione no método contrutor os argumentos que recebem estes valores ou em um outro método qualquer, por exemplo , setValores(String valorA, String valorB) … assim…
[code]
//Metodo da classe que extende o segundo JFrame
public void setValores(String valorA, String valorB){
JOptionPane.showMessageDialog(null,"Valor A = " + valorA + " valor B = " + valorB);
agora no segundo Frame “que é minha classe A” tenho um botão, e no evento de clicar nesse botão quero msotrar os vaores capturados nas caixas de texto do outro Frame " que é a classe Entrada", como faço esta amarração ? as caixas de texto estão numa classe e a mensagem vai aparecer em outra…isto q não consegui visualizar.
na verdade eu tenho uma tela principal, onde pssui botão entrada de dados que chame meu Frame e digito os valores A e B em duas caixas de texto e um botão onde chamo o Frame “A” para estar vizualindo os valoers digitados, dai dentro do frame A tenho um botão que ao clicar ele retorna a mensagem com os valores digitados.
Então… Vc pode criar um método no frame de entrada dos valores , por exemplo…
public String getValorA(){
return textFieldA.getText();
}
public String getValorB(){
return textFieldB.getText();
}
e quando clicar no botao de visualização ( que chama o Frame “A”), ou seja, na ação do botão, você pega os dois valores e passa esses como argumento para construir o frame “A”, tipo assim…
FrameA frameA = new FrameA(frameEntrada.getValorA(), frameEntrada.getValorB())
//depois deixa visível o frame "A"
frameA.show();
No Frame “A” você constrói a visualização do jeito que vc quer…por uma tabela ou JOptionPane… Mas no construtor dele, faça receber os dois argumentos
Assim…
Voce tem a classe A que é a classe principal que possui dois botões… um que chama o frame de cadastros (Classe B) e outro que chama a classe de visualização dos valores digitados(Classe C)… é o que eu entendi que vc quer fazer… então…
na classe A vc coloca a ação no botão para abrir o frame da classe B (inserção de valores) certo?
na classe B vc adiciona os métodos getValorA e getValorB, como citei no post anterior…
monta a classe C onde no contrutor desta classe, vc adiciona dois argumentos, String valorA e String valorB
Se sim… então ainda na classe A…na ação para abrir a classe C(de visualização) , no momento de inicializá-la (Sim no nomento que voce faz new classeC ) você passa os dois argumentos da classeB buscando os valores pelos métodos getValorA() e getValorB() então a inicialização da classe C ficaria assim ClasseC classeC = new ClasseC(classeB.getValorA(), classeB.getValorB()). Assim ao inicializar a classe C (de visualização estaria passando já o que foi digitado na classeB (de inserção de dados) depois fica fácil mostrar…
public class classeC extends JFrame{
private String valorA;
private String valorB;
//Método construtor que recebe os parâmetros e armazena nas variávies globais
public classeC(String valorA, String valorB){
this.valorA = valorA;
this.valorB = valorB;
//Aqui vc contrói o seu frame e mostra os valores...
...
}
}
}
aqui quando executo aparece a janela vazia sem o valor digitado, na classe b eu digita o valor e depis fecho usando o dispose dentro da acao de um botao fechar q criei.[b]
/**
@param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new C().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JTextField jTextFieldj;
// End of variables declaration
Obs1 - vc tem que adicionar o método initComponents(); nos dois construtores…
package frame;
import javax.swing.JOptionPane;
/**
*
* @author junio.mendonca
*/
public class C extends javax.swing.JFrame {
String valorA;
String valorB;
/** Creates new form ExibirResultado */
public C() {
initComponents();
}
public C(String valorA, String valorB){
this.valorA = valorA;
this.valorB = valorB;
initComponentes(); //// Aqui está o método para inicializar a tela
}
Obs2 - o método main vai ficar em qual classe ? Vai ficar na classe A?
quando vc inicializar a classe C tem que inicializar pelo construtor que receba argumentos,… tipo
new C(valorA, valorB).setVisible(true);
Obs3 - Você vai executar a classe de entrada de dados (B) antes da classe C certo?
Ou sua aplicação vai ter somente esta classse que vc postou?
eu tenho classe a = quem chama a classe b e classe c
a classe b recebe os dados
e a clase c, vai mostrar os dados digitados
e tenho um main
/*
To change this template, choose Tools | Templates
and open the template in the editor.
*/
package frame;
/**
*
@author junio.mendonca
*/
public class Main {
/**
@param args the command line arguments
*/
public static void main(String[] args) {
new A().setVisible(true);
}
}
eu digito na classe b, fecho o frame usando dispose() e chamo a classe c… ao dar a mensagem do valor digitado esta vindo em branco agora…parece q não pego a digitação.
vou postar o codigo da classe a e b
/*
A.java
Created on 9 de Maio de 2008, 10:13
*/
package frame;
/**
*
@author junio.mendonca
*/
public class A extends javax.swing.JFrame {
/** Creates new form A */
public A() {
initComponents();
}
/** This method is called from within the constructor to
initialize the form.
WARNING: Do NOT modify this code. The content of this method is
always regenerated by the Form Editor.
*/
//
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
@param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new A().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JPanel jPanel1;
// End of variables declaration
}
/*
EntradaDeDados.java
Created on 7 de Maio de 2008, 08:30
*/
package frame;
/**
*
@author junio.mendonca
*/
public class B extends javax.swing.JFrame {
/** Creates new form EntradaDeDados */
public B() {
initComponents();
}
/** This method is called from within the constructor to
initialize the form.
WARNING: Do NOT modify this code. The content of this method is
always regenerated by the Form Editor.
*/
//
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jTextFieldA = new javax.swing.JTextField();
jTextFieldB = new javax.swing.JTextField();
Desculpe a demora…tava cheio de coisas, mas pelo que vi… na sua idéia, na parte do código
// </editor-fold>
B b = new B();
C c = new C(b.getValorA(), b.getValorB());
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// B b = new B();
b.setVisible(true);
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
//C c = new C(b.getValorA(), b.getValorB());
c.setVisible(true);
}
na linha que inicializa a classe C não pode ficar logo abaixo da linha que inicializa o B, tem que ficar dentro da ação do botão que chama o c.setVisible daí dá certo tipo assim como está no código abaixo
/ </editor-fold>
B b = new B();
C c = null;
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
b.setVisible(true);
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
c = new C(b.getValorA(), b.getValorB());
c.setVisible(true);
}
Daí quando vc digitar o valor no B e depois abrir o C dá certo