Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在两个jframe之间传递值_Java_Swing - Fatal编程技术网

Java 如何在两个jframe之间传递值

Java 如何在两个jframe之间传递值,java,swing,Java,Swing,我有两个jframes, 我想从打开的另一个jframe到其他打开的jframe获取值。 当单击jframe1打开显示jframe2的按钮并在文本字段中键入一些文本,然后单击ok按钮时,文本字段值要获取jframe1jlable。如何做到这一点我试过,但我找不到一个方法来做到这一点 这可能吗 使用回调 将此代码添加到项目中: 定义接口 添加到jframe 2: 添加到jframe 1: 现在,每次jframe2调用接口方法时,您都会得到对jframe1中TODO标签的异步调用 创建一个在

我有两个
jframes
, 我想从打开的另一个
jframe
到其他打开的
jframe
获取值。 当单击
jframe1
打开显示
jframe2
的按钮并在文本字段中键入一些文本,然后单击
ok
按钮时,文本字段值要获取
jframe1
jlable
。如何做到这一点我试过,但我找不到一个方法来做到这一点

这可能吗

使用回调

将此代码添加到项目中:

定义接口
添加到jframe 2:
添加到jframe 1: 现在,每次jframe2调用接口方法时,您都会得到对jframe1中TODO标签的异步调用


创建一个在jframe2中接受jframe1的方法 在OpenButtonAction事件中,从jframe2创建一个对象,并调用接受jframe1的方法

因此,当您单击jframe2中的Ok按钮时,通过methdo将该文本字段值传递给jframe1对象(您传递给jframe2)

public class jframe1 {

  public void actionPerformed(ActionEvent a){
     jfame2 jf2 = new jframe2();
     jf2.setJframe1(this);
  }
  public void updateLable(String value){
     lblIdk.setText(value);
  }
}


public class jframe2 {
  private jframe1 jf1;
  public void setJframe1(jframe1 jf1){
     this.jf1 = jf1;
  }
  public void actionPerformed(ActionEvent a){
     this.jf1.updateLable(txtidk.getText());
  }
}

在这两个JFrame之间使用回调接口…使用@Ashan创建另一个JFrame?你能多发一点代码让我们帮你吗?在这种情况下,jOptionPane不是一个解决方案@SergiyMedvynskyy:(感谢您使用模式对话框,它将阻止您的代码执行,直到窗口关闭,此时您可以使用getter从其他类获取值,或者只需使用模式对话框并等待它关闭
public void setCallback(){jframe.addCallback(myListener);}
要添加此回调的jframe是什么?)???
private ICallbackListener myListener;
public void addCallback(ICallbackListener myListener){
    this.myListener = myListener;
}


...
if(myListener!=null){
myListener.onNewEvent("myMessage");
}
...
private ICallbackListener myListener;

ICallbackListener i = new ICallbackListener() {
            
            @Override
            public void onNewEvent(String msg) {
                // TODO Auto-generated method stub
                
            }
        };
        
public void setCallback( ){
    jframe2.addCallback(myListener);
}
import java.awt.FlowLayout;
import javax.swing.*;
import java.awt.event.*;

class TestFrameExample extends JFrame  implements ActionListener{
    static JLabel label ; 
    public static TestFrameExample test;
    TestFrameExample()
   {
      JPanel panel = new JPanel();
      panel.setLayout(new FlowLayout());
      label = new JLabel("This is a label!");
      JButton button = new JButton("Open");
      button.setText("Press me");
      button.addActionListener(this);
      panel.add(label);
      panel.add(button);
      add(panel);
      setSize(300, 300);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setVisible(true);
  }

   public void actionPerformed(ActionEvent a)
   {
          new TestFrameExample1();
  }
  public static void main(String s[]) {
      test=new TestFrameExample();
  }
}

class TestFrameExample1 extends JFrame  implements ActionListener {
  JTextField t;
  TestFrameExample test;
  public TestFrameExample1()
  {
        setSize(300, 300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setLayout(null);
        t=new JTextField();
        t.setBounds(100,20,150,20);
        JButton button=new JButton("oK");
        button.setBounds(100,50,100,30);
        button.addActionListener(this);
        add(t);
        add(button);
    }
    public void actionPerformed(ActionEvent a)
   {
        test.label.setText(t.getText());
   }
  }
public class jframe1 {

  public void actionPerformed(ActionEvent a){
     jfame2 jf2 = new jframe2();
     jf2.setJframe1(this);
  }
  public void updateLable(String value){
     lblIdk.setText(value);
  }
}


public class jframe2 {
  private jframe1 jf1;
  public void setJframe1(jframe1 jf1){
     this.jf1 = jf1;
  }
  public void actionPerformed(ActionEvent a){
     this.jf1.updateLable(txtidk.getText());
  }
}