Ver Mensaje Individual
  #8 (permalink)  
Antiguo 12/02/2011, 10:40
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Como pasar datos entre JFrames?

Cita:
Iniciado por hwongu Ver Mensaje
Puedes poner las variables de forma "public static" para el llamado de las variables
¿static? ¿Vas a declarar los controles estáticos? Las variables estáticas se comparten entre todas las instancias, si creas dos instancias del mismo formulario van a compartir el mismo control (botón, texto, etc.) ... y seguramente no va a funcionar correctamente.

Cita:
Iniciado por CarlosAP Ver Mensaje
Este problema se me ha presentado a mi infinidad de veces y la solución que me propuso mi profesor me resultó bastante cómoda, y es crear una clase que utilice el patrón de diseño Singleton, de esta forma tendrás acceso siempre y en todo momento al objeto singleton... sea este tu aplicación al completo o solo un frame o lo que quieras que sea...
¿Singleton? Por lo menos corregiría el problema de las variables estáticas, puesto que solo se puede crear una instancia del formulario. ¿Y si quiero varias instancias del mismo formulario?


Los controles del formulario son miembros de la clase y solamente deben ser expuestos de una manera que no se pueda modificar la instancia del control, por ejemplo:

Código Java:
Ver original
  1. public javax.swing.JTextField getjTextField1() {
  2.         return jTextField1;
  3.     }

Saludos,

El código completo:

Main.java
Código Java:
Ver original
  1. public class Main {
  2.     public static void main(String[] args) {
  3.         new JFrame1().setVisible(true);
  4.     }
  5. }

JFrame1.java
Código Java:
Ver original
  1. public class JFrame1 extends javax.swing.JFrame {
  2.  
  3.     private javax.swing.JButton jButton1;
  4.     private javax.swing.JTextField jTextField1;
  5.     private JFrame2 frame2;
  6.  
  7.     public JFrame1() {
  8.         initComponents();
  9.         this.frame2 = new JFrame2();
  10.         this.frame2.setVisible(true);
  11.     }
  12.  
  13.     private void initComponents() {
  14.         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  15.  
  16.         jTextField1 = new javax.swing.JTextField();
  17.         jTextField1.setText("Hello World!");
  18.  
  19.         jButton1 = new javax.swing.JButton();
  20.         jButton1.setText("jButton1");
  21.         jButton1.addActionListener(new java.awt.event.ActionListener() {
  22.             @Override
  23.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  24.                 jButton1ActionPerformed(evt);
  25.             }
  26.         });
  27.  
  28.         getContentPane().add(jTextField1, java.awt.BorderLayout.CENTER);
  29.         getContentPane().add(jButton1, java.awt.BorderLayout.PAGE_END);
  30.         pack();
  31.         setLocationByPlatform(true);
  32.     }
  33.  
  34.     private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
  35.         frame2.getjTextField1().setText(jTextField1.getText());
  36.     }
  37. }

JFrame2.java
Código Java:
Ver original
  1. public class JFrame2 extends javax.swing.JFrame {
  2.  
  3.     private javax.swing.JTextField jTextField1;
  4.  
  5.     public JFrame2() {
  6.         initComponents();
  7.     }
  8.  
  9.     private void initComponents() {
  10.         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  11.  
  12.         jTextField1 = new javax.swing.JTextField();
  13.         jTextField1.setText("jTextField1");
  14.  
  15.         getContentPane().add(jTextField1, java.awt.BorderLayout.CENTER);
  16.         pack();
  17.         setLocationByPlatform(true);
  18.     }
  19.  
  20.     public javax.swing.JTextField getjTextField1() {
  21.         return jTextField1;
  22.     }
  23. }