【问题标题】:Send data to previous JFrame将数据发送到上一个 JFrame
【发布时间】:2014-04-11 09:03:24
【问题描述】:

我正在使用 JFrame,我有一个主 JFrame,它需要第二个 JFrame(例如 jFrame2)。我需要 jFrame2 有 9 个按钮,每个按钮内都有图像(在这里完美)。然后当在 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();
}

【问题讨论】:

  • 老实说,只需使用模态对话框...
  • 是的,但我需要放入 jFrame2 或 JDialog 9 按钮,每个按钮上都有一个大图像。 JDialog可以配置9个按钮,每个按钮都有一个图片和一些动作?
  • 简短答案是的,长答案是它可能需要根据图像的大小进行一些调整...

标签: java swing jframe multiple-instances


【解决方案1】:

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

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

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

【讨论】:

  • 但我需要在 jFrame2 或 JDialog 9 按钮中放入每个按钮上的大图像。 JDialog可以配置9个按钮,每个按钮都有一个图片和一些动作?
  • JDialog 是一种窗口,所以 JFrame 可以做的任何事情,JDialog 都可以做(虽然不能最大化),它可以是模态的,阻塞直到它关闭。检查链接,它会解释更多
  • 非常感谢你的朋友,我要检查这个链接:-D
【解决方案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
}

【讨论】:

  • 这只是我的看法,但是将 frame1 暴露给 frame2 会给 frame2 很大的权力来处理它不应该被允许做或知道它可以做的事情。 Frame2 应该只做它设计的工作,仅此而已
  • @MadProgrammer,我同意你的观点,我们可以让 jFrame1 实现一个接口说 Setter 只使用方法 setString(String) 并构造 jFrame2 具有像 public jFrame2(Setter setter) 这样的构造函数
  • 这当然是一个解决方案
  • @Despotars,你可以让你的 jFrame2 扩展 JDialog,以防你不希望用户在 jFrame2 关闭之前专注于 jFrame1。
  • @Despotars,你可以refer this
【解决方案3】:

好的,所以解决方案很简单。编辑你的类如下:

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();
    }
    .
    .
}

希望这会有所帮助。

【讨论】:

  • 这只是我的看法,但是将 frame1 暴露给 frame2 会给 frame2 很大的权力来处理它不应该被允许做或知道它可以做的事情。 Frame2 应该只做它设计的工作,仅此而已
【解决方案4】:

你可以有一个 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

   ....
}

【讨论】:

  • 这只是我的看法,但是将 frame1 暴露给 frame2 会给 frame2 很大的权力来处理它不应该被允许做或知道它可以做的事情。 Frame2 应该只做它设计的工作,仅此而已
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
相关资源
最近更新 更多