关于两个窗口间的数据传递

原创 2006年06月13日 23:32:00

其实道理很简单,关键是在frame1在调用frame2的时候,frame2怎么获得frame1的对象

一种方法是改造frame2的构造函数,例如:

Frame2(Frame1 fObj){}

即把把Frame1类的对象带进Frame2中,那么frame2就可以调用frame1的各种属性和方法了

第二种方法就是不改造Frame2的高造函数,而是写一个方法返回Frame1的对象

例如:

public void getFrame1Object(Frame1 fObj){

     f1Obj=fObj;

}

 

偷个懒,用jbuilder做的测试,ctrl c + v 太方便了

主程序代码:

package 互相调用菜单;

import java.awt.Toolkit;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import java.awt.Dimension;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class Application {
    boolean packFrame = false;

    /**
     * Construct and show the application.
     */
    public Application() {
        Frame1 frame = new Frame1();
        // Validate frames that have preset sizes
        // Pack frames that have useful preferred size info, e.g. from their layout
        if (packFrame) {
            frame.pack();
        } else {
            frame.validate();
        }

        // Center the window
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = frame.getSize();
        if (frameSize.height > screenSize.height) {
            frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
            frameSize.width = screenSize.width;
        }
        frame.setLocation((screenSize.width - frameSize.width) / 2,
                          (screenSize.height - frameSize.height) / 2);
        frame.setVisible(true);
    }

    /**
     * Application entry point.
     *
     * @param args String[]
     */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.
                                             getSystemLookAndFeelClassName());
                } catch (Exception exception) {
                    exception.printStackTrace();
                }

                new Application();
            }
        });
    }
}

 

窗口1代码:

 

package 互相调用菜单;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Rectangle;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class Frame1 extends JFrame {
    JPanel contentPane;
    JButton btn = new JButton();
    public Frame1() {
        try {
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            jbInit();
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }

    /**
     * Component initialization.
     *
     * @throws java.lang.Exception
     */
    private void jbInit() throws Exception {
        contentPane = (JPanel) getContentPane();
        contentPane.setLayout(null);
        setSize(new Dimension(400, 300));
        setTitle("我是窗口1");
        btn.setBounds(new Rectangle(119, 141, 99, 25));
        btn.setText("调用窗口2");
        btn.addActionListener(new Frame1_btn_actionAdapter(this));
        contentPane.add(btn);
    }

    public void btn_actionPerformed(ActionEvent e) {
        //Frame2 f2Obj=new Frame2(this);//改动构造方法
        /*
        Frame2 f2Obj=new Frame2();//不改动构造方法(这行和下行一组)
        f2Obj.f1Obj=this;
        */
        Frame2 f2Obj=new Frame2();
        f2Obj.getFrame1Object(this);
        f2Obj.setSize(400,300);
        f2Obj.setTitle("我是窗口2");
        f2Obj.setLocation(this.getX(),this.getY());
        f2Obj.setVisible(true);
    }

    public  Object getObjectOfFram1(){
        return this;
    }
}


class Frame1_btn_actionAdapter implements ActionListener {
    private Frame1 adaptee;
    Frame1_btn_actionAdapter(Frame1 adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.btn_actionPerformed(e);
    }
}

 

窗口2代码:

 

package 互相调用菜单;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.*;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Rectangle;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class Frame2 extends JFrame {
    Frame1 f1Obj;
    JTextField txt = new JTextField();
    JButton btn = new JButton();
    public Frame2() {
        try {
            jbInit();
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
    public Frame2(Frame1 f) {
    f1Obj=f;
    try {
        jbInit();
    } catch (Exception exception) {
        exception.printStackTrace();
    }
}


    private void jbInit() throws Exception {
        getContentPane().setLayout(null);
        txt.setText("");
        txt.setBounds(new Rectangle(116, 26, 104, 22));
        btn.setBounds(new Rectangle(118, 146, 125, 25));
        btn.setText("返回窗口1的数据");
        btn.addActionListener(new Frame2_btn_actionAdapter(this));
        this.getContentPane().add(txt);
        this.getContentPane().add(btn);
    }

    public void btn_actionPerformed(ActionEvent e) {
        String str=f1Obj.getTitle();
        txt.setText(str);
    }
   
    public void getFrame1Object(Frame1 fObj){
        f1Obj=fObj;
    }
}


class Frame2_btn_actionAdapter implements ActionListener {
    private Frame2 adaptee;
    Frame2_btn_actionAdapter(Frame2 adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {

        adaptee.btn_actionPerformed(e);
    }
}

Qt实现两个非模态窗口的数据传递(信号与槽方式)

我尝试过定义全局变量,但是怎么都无法运行成功,所以换信号与槽方式。我这里的实现是,在一个窗体内的LineEdit中输入一段文本,点击一个按钮控件后,输入的文本显示在另一个独立的窗口中的LineEdit...

六、两个窗口间的数据绑定

本示例包含两个窗口,主窗口为MainWindow类,外加一个自定义窗口MyDialog(当作自定义对话框)。主窗口中有一个TextBlock控件和一个Button控件,当点击按钮后会打开MyDialo...

两个窗口之间信息的传递 C#

大家好,当我们在做windows form 的时候,常常要从一个窗口读取一些信息到另外一个窗口当中去使用。 下面有个例子: 我要将   form1  中的 textboxInForm1  的内容读...

c井窗口间7种数据传递方式

  • 2017年05月22日 09:18
  • 96KB
  • 下载

两个窗口之间信息的传递 C#

大家好,当我们在做windows form 的时候,常常要从一个窗口读取一些信息到另外一个窗口当中去使用。 下面有个例子: 我要将   form1  中的 textboxInForm1  的内容读...

MFC 两个窗口 传递值

MFC 两个窗口间传值, c++
  • HK_5788
  • HK_5788
  • 2017年02月27日 21:44
  • 1398

webdriver实现2个或两个以上窗口间切换的方法

在UI自动化测试中,经常为需要打开多个窗口,以下两个方法分别实现了两个窗口和多个窗口间切换的功能,现分享代码如下: /** *  切换窗口(当前窗口为2个) */ public void change...
  • russ44
  • russ44
  • 2016年08月05日 12:46
  • 4271
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于两个窗口间的数据传递
举报原因:
原因补充:

(最多只允许输入30个字)