我正在使用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();
}
答案 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
....
}