Cita:
Iniciado por hwongu
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
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:
Saludos,
El código completo:
Main.java
Código Java:
Ver originalpublic class Main {
public static void main
(String[] args
) { new JFrame1().setVisible(true);
}
}
JFrame1.java
Código Java:
Ver originalpublic class JFrame1
extends javax.
swing.
JFrame {
private javax.
swing.
JButton jButton1
; private JFrame2 frame2;
public JFrame1() {
initComponents();
this.frame2 = new JFrame2();
this.frame2.setVisible(true);
}
private void initComponents() {
jTextField1.setText("Hello World!");
jButton1
= new javax.
swing.
JButton(); jButton1.setText("jButton1");
@Override
public void actionPerformed
(java.
awt.
event.
ActionEvent evt
) { jButton1ActionPerformed(evt);
}
});
getContentPane
().
add(jTextField1, java.
awt.
BorderLayout.
CENTER); getContentPane
().
add(jButton1, java.
awt.
BorderLayout.
PAGE_END); pack();
setLocationByPlatform(true);
}
private void jButton1ActionPerformed
(java.
awt.
event.
ActionEvent evt
) { frame2.getjTextField1().setText(jTextField1.getText());
}
}
JFrame2.java
Código Java:
Ver originalpublic class JFrame2
extends javax.
swing.
JFrame {
public JFrame2() {
initComponents();
}
private void initComponents() {
jTextField1.setText("jTextField1");
getContentPane
().
add(jTextField1, java.
awt.
BorderLayout.
CENTER); pack();
setLocationByPlatform(true);
}
return jTextField1;
}
}