将数据发送到以前的JFrame

时间:2014-04-11 09:03:24

标签: java swing jframe multiple-instances

我正在使用JFrames,我有一个主JFrame,它需要第二个JFrame(例如jFrame2)。我需要的是,jFrame2有9个按钮,每个按钮内都有图像(UP HERE ALL PERFECT)。然后在jFrame2中按一个按钮,关闭jFrame2并将字符串发送到jFrame1。 jFrame1必须等待结束jFrame2接收发送jFrame2的字符串,并且因为jFrame1使用该字符串向服务器发送JSON。

这是我的示例代码:

////// class 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);

   //HERE I WANT THE PROGRAM RESPONSE TO WAIT CLOSE AND CONTINUE RUNNING JFrame

   ....
}



////// class jFrame2 //////

public class jFrame2 extends javax.swing.JFrame{

   private JButton jButton1;
   private JButton jButton2;

   public jFrame2(){
   }

   .....

}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
   //HERE I WANT TO SEND A STRING ON JFRAME1 BEFORE CLOSING THIS JFRAME2
   this.dispose();
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
   //HERE I WANT TO SEND A STRING ON JFRAME1 BEFORE CLOSING THIS JFRAME2
   this.dispose();
}

4 个答案:

答案 0 :(得分:3)

更改它,以便frame2有一个frame1可以检索已设置值的方法(getter)。

更改它,以便frame2是模式JDialog。这将导致代码在JDialog可见的位置停止,但允许其余UI保持响应。当对话框关闭时,代码(在frame1中)将继续执行,您可以通过前面提到的getter从frame2检索值。

请查看How to make dialogs了解更多详情......

答案 1 :(得分:2)

你可以这样试试:

public class jFrame1 extends javax.swing.JFrame{
  // ur code
  private String string;

  public void setString(String string) {
    this.string = string;
  }
}

public class jFrame2 extends javax.swing.JFrame{
  // ur code
  private jFrame1 frame1; // <-- note its jFrame1 not JFrame

  public jFrame2(jFrame1 frame1) { // <-- note its jFrame1 not JFrame
    this.frame1 = frame1;
  }

  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    this.frame1.setString("wat u wana send here");
    this.dispose();
  }

  // so on
}

答案 2 :(得分:1)

好的,所以解决方案非常简单。按如下方式编辑您的课程:

public class jframe1 extends JFrame{
    .
    .
    private String response;
    private void jButton1ActionPerformed(ActionEvent evt) {
        jFrame2 regPack = new jFrame2(**this**);  // pass the current reference of the frame
    .
    .
    .
    }

    public setResponse(String response) {
        this.response = response;
    }
    .
    .
    .
}

public class jframe2 extends JFrame {
    .
    .
    .
    .
    jframe1 jf1;
    jframe2() {
    }

    jframe2(jframe1 jf1) {
        this.jf1 = jf1;
    }


    private void jButton1ActionPerformed(ActionEvent evt) {
        jf1.setResponse("this is the response"); // set the response here
        this.dispose();
    }
    .
    .
}

希望这有帮助。

答案 3 :(得分:1)

您可以为JFrame2设置参数化构造函数,它接受JFrame1的实例

public JFrame2(JFrame1 frame) {...}

JFrame2可以有一个变量来存储JFrame1的值。 按下按钮时,您可以按如下方式在JFrame1中调用方法:

frame1.setString("...");

您可以将JFrame1的实例传递给JFrame2

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
   jFrame2 regPack = new jFrame2(this);
   regPack.setLocationRelativeTo(null);
   regPack.setVisible(true);

   //HERE I WANT THE PROGRAM RESPONSE TO WAIT CLOSE AND CONTINUE RUNNING JFrame

   ....
}