如何在两个jframe之间传递值

时间:2016-03-04 08:44:03

标签: java swing

我有两个jframes, 我想从另一个jframe打开其他已打开的jframe获取价值。 当点击显示jframe1的{​​{1}} open按钮并在文本字段中输入一些文字并点击jframe2按钮时,文字字段值希望获得ok {{1} }。如何做到这一点,我试过,但我找不到办法做到这一点。

这可能吗?

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:3)

使用回调

将此代码添加到您的项目中:

定义接口

public interface ICallbackListener{
    void onNewEvent(String msg);
}

添加到jframe 2:

private ICallbackListener myListener;
public void addCallback(ICallbackListener myListener){
    this.myListener = myListener;
}


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

添加到jframe 1:

private ICallbackListener myListener;

ICallbackListener i = new ICallbackListener() {

            @Override
            public void onNewEvent(String msg) {
                // TODO Auto-generated method stub

            }
        };

public void setCallback( ){
    jframe2.addCallback(myListener);
}

现在,jframe2每次调用接口方法都会异步调用jframe1中的TODO标签

答案 1 :(得分:2)

试试这个

enter image description here

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

答案 2 :(得分:0)

创建一个在jframe2中获取jframe1的方法 在打开按钮动作事件中,从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());
  }
}