Foro sobre Java SE > Enviar Datos a JFrame anterior
La solución más sencilla sería usar un PropertyChangeListener en el JFrame2.
http://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html
Como este tipo de soluciones pueden ser confusas al principio, te adjunto un test donde puedes ver cómo se usa.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Frame2 extends javax.swing.JFrame {
private static final long serialVersionUID = 4_751_412_570_988_645_066L;
/** Creates new form Frame2 */
public Frame2() {
initComponents();
jButton1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Frame2.this.firePropertyChange("jButton1", null, "botón 1 pulsado");
Frame2.this.dispose();
}
});
jButton2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Frame2.this.firePropertyChange("jButton2", null, "botón 2 pulsado");
Frame2.this.dispose();
}
});
}
/** 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.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
org.openide.awt.Mnemonics.setLocalizedText(jButton1, org.openide.util.NbBundle.getMessage(Frame2.class, "Frame2.jButton1.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(jButton2, org.openide.util.NbBundle.getMessage(Frame2.class, "Frame2.jButton2.text")); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(226, Short.MAX_VALUE)
.addComponent(jButton2)
.addGap(18, 18, 18)
.addComponent(jButton1)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(266, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addContainerGap())
);
pack();
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
// End of variables declaration
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
public class Frame1 extends javax.swing.JFrame {
private static final long serialVersionUID = 6_179_579_884_928_667_737L;
/** Creates new form Frame1 */
public Frame1() {
initComponents();
jButton1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Frame2 frame2 = new Frame2();
frame2.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
String nombre = evt.getPropertyName();
if ("jButton1".equals(nombre) || "jButton2".equals(nombre)) {
System.out.println(evt.getNewValue());
// saldrá por la consola "botón 1 pulsado" o "botón 2 pulsado"
}
}
});
frame2.setVisible(true);
}
});
}
/** 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.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
org.openide.awt.Mnemonics.setLocalizedText(jButton1, org.openide.util.NbBundle.getMessage(Frame1.class, "Frame1.jButton1.text")); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(317, Short.MAX_VALUE)
.addComponent(jButton1)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(266, Short.MAX_VALUE)
.addComponent(jButton1)
.addContainerGap())
);
pack();
}// </editor-fold>
/**
@param args the command line arguments
*/
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Frame1().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
// End of variables declaration
}
Buenos Días,
Estoy trabajando con jFrames, tengo un jFrame principal, el cual llama a un segundo jFrame (jFrame2 por ejemplo). Lo que necesito es que en ese jFrame2 haya 9 botones con imágenes dentro de cada botón (HASTA AQUÍ TODO PERFECTO). Entonces cuando en el jFrame2 pulse un botón, este se cierre y envíe un string al jFram1e, el cual estará deberá quedarse esperando que el jFrame2 acabe para recibir el string y enviar una orden de JSON al servidor con ese dato.
No se si es mucho lío o si me expliqué bien.
Les paso parte del código que tengo a ver si me podéis ayudar:
////// clase jFrame1 //////
public class jFrame1 extends javax.swing.JFrame{
public JTextField JTextField1;
public JTextField JTextField2;
public JTextField JTextField3;
private JButton jButton1;
.....
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
jFrame2 regPack = new jFrame2();
regPack.setLocationRelativeTo(null);
regPack.setVisible(true);
//AQUI QUIERO QUE EL PROGRAMA ESPERE LA RESPUESTA AL CERRAR EL JFRAME Y CONTINUE EJECUTANDOSE
....
}
////// clase jFrame2 //////
public class jFrame2 extends javax.swing.JFrame{
private JButton jButton1;
private JButton jButton2;
public jFrame2(){
}
.....
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
//AQUI QUIERO ENVIAR UN DATO AL JFRAME ANTERIOR ANTES DE CERRAR ESTE JFRAME
this.dispose();
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
//AQUI QUIERO ENVIAR UN DATO AL JFRAME ANTERIOR ANTES DE CERRAR ESTE JFRAME
this.dispose();
}