编写桌面应用程序,两个JFrame之间,JFrame1,JFrame2,它们能不能互相传递数据?
JFrame1可以传递数据给JFrame2,JFrame2能不能反过来传递数据给JFrame1?
要怎么做?

解决方案 »

  1.   

    能否说的详细一些?代码或者其他详细描述?很多都可以实现这样的东西,例如设计模式中的观察者模式。MVC结构,通过控制器来协调各个窗口,等等~~呵呵,最好能够详细描述,不然说这些可能对你没有什么帮助。
      

  2.   

    Frame之间一定有调用者和被调用者的关系,可以通过相互传递实例的方法实现彼此之间的通讯问题,当然这样做不是最好的方法,因为程序会变得比较乱。所以最好是建立数据接口,通过接口来实现通讯过程。
      

  3.   

    最简单的办法设置个public 的对象慢慢传吧,不过不安全,别人也能用啊或者做个接口,数据量大,或者传递频率高时使用,安全可靠。
      

  4.   


    我想你说的控制器可能有用。不过我也不知道怎么用。我只知道用new实例化来传递数据,new 对像了,之前的信息就得不到。所以只能单方面的传递,不能双向传递。你说的控制器要怎么用呢?
    可以给我一个实例吗?
    举一个很简单的例子。JFrame1 传一个 String s1 给 JFrame2,JFrame1 不关闭,JFrame2显示出来,当JFrame2按一个按钮时,再传一个String s2 给 JFrame1,JFrame1不重新new也能接收到JFrame2传来的信息.
      请帮忙给个例子,谢谢
      

  5.   

    简单写了个小程序,为了分工明确, 分了三个文件。你看一下,希望能对你有所帮助。
    package transport;import java.util.ArrayList;
    import java.util.List;import javax.swing.JFrame;public class Controller {
    public interface ValueChange {
    public void valueChanged(String str);
    } private List frameList = new ArrayList(); public Controller() {
    JFrame f1 = new MyFrame1(this);
    JFrame f2 = new MyFrame1(this);
    JFrame f3 = new MyFrame2(this);
    JFrame f4 = new MyFrame2(this); frameList.add(f1);
    frameList.add(f2);
    frameList.add(f3);
    frameList.add(f4); f1.setVisible(true);
    f2.setVisible(true);
    f3.setVisible(true);
    f4.setVisible(true);
    } public void valueChanged(String str, ValueChange source) {
    for (int i = 0; i < frameList.size(); i++) {
    ValueChange vc = (ValueChange) frameList.get(i);
    if (vc == source) {
    continue;
    } if (((JFrame) vc).hasFocus()) {
    ((JFrame) vc).requestFocus();
    }
    vc.valueChanged(str);
    }
    } public static void main(String args[]) {
    new Controller();
    }
    }
    package transport;import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JTextField;import transport.Controller.ValueChange;public class MyFrame1 extends JFrame implements ValueChange, ActionListener { private static final long serialVersionUID = 1L; private Controller ctrl; private JTextField ta = new JTextField(20); public MyFrame1(final Controller ctrl) {
    super();
    this.ctrl = ctrl; getContentPane().add(ta, BorderLayout.CENTER);
    JButton button = new JButton("OK");
    button.addActionListener(this);
    getContentPane().add(button, BorderLayout.SOUTH); pack();
    setVisible(true);
    } public void valueChanged(String str) {
    ta.setText(str);
    } public void actionPerformed(ActionEvent e) {
    String str = ta.getText();
    ctrl.valueChanged(str, this);
    }}
    package transport;import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JTextField;import transport.Controller.ValueChange;public class MyFrame2 extends JFrame implements ValueChange, ActionListener { private static final long serialVersionUID = 1L; private Controller ctrl; private JTextField ta = new JTextField(20); public MyFrame2(final Controller ctrl) {
    super();
    this.ctrl = ctrl; getContentPane().add(ta, BorderLayout.CENTER); JButton button = new JButton("OK");
    button.addActionListener(this);
    getContentPane().add(button, BorderLayout.SOUTH); pack();
    setVisible(true);
    } public void valueChanged(String str) {
    ta.setText(str);
    } public void actionPerformed(ActionEvent e) {
    String str = ta.getText();
    ctrl.valueChanged(str, this);
    }}
      

  6.   

    既然多frame的应用你就用数组之类的记着对象呗!
      

  7.   

    不是通信的话就可以通过两个Frame之间的触发事件来传递信息咯。