首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如何在两个jframe中传递对象 [已结帖,结帖人:try__again]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • try__again
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-09 12:06:55 楼主
    e.g
    A是主窗体,B是弹出窗体

    A有个按钮用来调用显示B,显示的内容为A中某个指定对象Obj

    通过B可以对Obj进行修改

    B中有两个按钮(ok/cancel)

    要求点B的ok时,将修改后的Obj传回A,如果是cancel则不作任何修改

    简单的说,就是子窗体显示父窗体的某个对象,并将修改过的值传回去

    请达人指教
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • shengli_liao
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-18 16:38:201楼 得分:10
    JDialog
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • shura168
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-18 16:46:492楼 得分:20
    有一个笨一点的方法,那就是在B窗体中定义一个区分和A窗体的Obj(Bean) ,
    区分用来识别(ok/cancel)哪一个按钮押下!
    Bean用来存放数据

    至于给Bean复值操作,你可以在B窗体的构造方法里面实装!或者通过public的setBean方法实装!

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • horizonlyhw
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-18 17:47:043楼 得分:5
    引用 1 楼 shengli_liao 的回复:
    JDialog
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • DonnyZXT
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-18 23:07:424楼 得分:20
    你自己写个函数,放在B的变量里呗。写个方法读这个变量。
    即使你关掉窗口时调用dispose(),变量仍然不会消失。
    void onClick() {
        B dlg = new B(obj);
        dlg.setVisible(true);
        dlg.getValue();
        ......
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yzzlijun
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 00:01:325楼 得分:30
    Start类
    public class Start {
    public static void main(String[] args) {
    new MainFrame();
    }
    }
    主窗口
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class MainFrame extends JFrame implements ActionListener {
    private Container me;
    private JButton btnOk;
    private JButton btnCancel;
    private JLabel lblSNumber;
    public JTextField txtNumber;
    public MainFrame() {
    init();
    this.setSize(400,300);
    this.setTitle("主窗体");
    this.setResizable(false);
    this.setLocationRelativeTo(null);
    this.setVisible(true);
    }
    public void init() {
    lblSNumber = new JLabel("数量:");
    lblSNumber.setBounds(60,50,80,20);
    txtNumber = new JTextField("100");
    txtNumber.setBounds(140,50,120,20);
    txtNumber.setEditable(false);
    btnOk = new JButton("修改");
    btnOk.setBounds(80,200,80,40);
    btnOk.setActionCommand("ok");
    btnOk.addActionListener(this);
    btnCancel = new JButton("退出");
    btnCancel.setBounds(180,200,80,40);
    btnCancel.setActionCommand("cancel");
    btnCancel.addActionListener(this);
    me = this.getContentPane();
    me.setLayout(null);
    me.add(btnOk);
    me.add(btnCancel);
    me.add(lblSNumber);
    me.add(txtNumber);
    }
    public void actionPerformed(ActionEvent e) {
    String str = e.getActionCommand();
    if(str.equals("ok")) {
    new Update(this);//把窗口的引用传过去
    }else if(str.equals("cancel")) {
    System.exit(0);
    }
    }

    }
    子窗口
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class Update extends JDialog implements ActionListener{
    private Container me;
    private JButton btnOk;
    private JButton btnCancel;
    private JLabel lblSNumber;
    public JTextField txtNumber;
    private MainFrame mainframe;
    public Update(JFrame f) {
    super(f,true);
    mainframe = (MainFrame)f;
    init();
    this.setSize(300,200);
    this.setTitle("修改");
    this.setResizable(false);
    this.setLocationRelativeTo(null);
    this.setVisible(true);
    }
    public void init() {
    lblSNumber = new JLabel("数量:");
    lblSNumber.setBounds(60,50,80,20);
    txtNumber = new JTextField(mainframe.txtNumber.getText());
    txtNumber.setBounds(140,50,120,20);
    btnOk = new JButton("修改");
    btnOk.setBounds(80,100,80,40);
    btnOk.setActionCommand("ok");
    btnOk.addActionListener(this);
    btnCancel = new JButton("退出");
    btnCancel.setBounds(180,100,80,40);
    btnCancel.setActionCommand("cancel");
    btnCancel.addActionListener(this);
    me = this.getContentPane();
    me.setLayout(null);
    me.add(btnOk);
    me.add(btnCancel);
    me.add(lblSNumber);
    me.add(txtNumber);
    }
    public void actionPerformed(ActionEvent e) {
    String str = e.getActionCommand();
    if(str.equals("ok")) {
    mainframe.txtNumber.setText(this.txtNumber.getText());//通过传过来的窗口修改
    this.dispose();
    }else if(str.equals("cancel")) {
    this.dispose();
    }
    }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nj_zwd
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 09:44:076楼 得分:5
    可以在展示B时将A中的Obj拷贝(clone())一份给B,待在B中修改好后再将该Obj覆盖A中的Obj(重新定位指针)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wnomad
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 12:34:457楼 得分:5
    在A中定义一个B对象=====>ExampleB

    在A中响应:  if (null == ExampleB)      ExampleB = new B();
                else      ExampleB.show(A);

    在B中定义一个方法:        public void show(JComponent D) {
                                  JDialog jd = new JDialog(D);      //这里你把A作为B的父窗口传进来就可以获取A中相应的数据了,同时在A中定义一个set方法就可以把B中你想改变的值又传回去给A了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • D_F_W123
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-28 19:28:358楼 得分:0
    弹出窗体有的带有文本框的那种。InputDialog 试试
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • syoumei
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-28 19:45:169楼 得分:0
    汗....

    不管你用eclipse的rcp 还是sun的sw 调用子窗体的话 肯定有个方法会提供一个返回指的

    如果你要自己用2个同等的窗体瞎来来的话 可以只样搞 一个窗体内有一个对象含有另外一个窗体的引用
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yygywqf
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-30 10:44:0610楼 得分:0
    A是主窗体,B是弹出窗体

    A有个按钮用来调用显示B,显示的内容为A中某个指定对象Obj

    通过B可以对Obj进行修改

    B中有两个按钮(ok/cancel)

    要求点B的ok时,将修改后的Obj传回A,如果是cancel则不作任何修改

      这个你只要把A中的Obj设为全局对象不就OK了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yzzlijun
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-31 01:52:3311楼 得分:0
    怎么还没有弄懂
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nj_dobetter
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-31 16:01:2012楼 得分:0
    在B中声明Obj的引用,
    在A中创建B弹出窗体时把A中Oj引用传给B.

    B建立后再可以通过本地的Obj引用修改A数据的值
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • meihuiyu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-31 18:48:2513楼 得分:0
    JDialog
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • djt_1982
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-01 18:57:3614楼 得分:5
    //父窗体
    public SuperFrame extends…………{

      //显示子对话框的动作
      public void actionPerformed(ActionEvent e) {
          …………
          SonDialog son = new SonDialog(this);
          son.show();
      }
      //设置Obj
      public void setValue(Object obj){
        …………
      }

    }

    //子对话框
    SonDialog extends JDialog{
      SuperFrame super;
      SonDialog (SuperFrame super){
        this.super = super;
          …………
      }


      public void actionPerformed(ActionEvent e) {
        …………
        super.setValue(…………);
      }
     
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • djt_1982
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-01 18:59:1715楼 得分:0
    。。。怎么没办法修改自己的回帖?还想把SonDialog 改称sonframe呢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • channon
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-02 09:01:1016楼 得分:0
    引用 14 楼 djt_1982 的回复:
    //父窗体
    public SuperFrame extends…………{

    //显示子对话框的动作
    public void actionPerformed(ActionEvent e) {
    …………
    SonDialog son = new SonDialog(this);
    son.show();
    }
    //设置Obj
    public void setValue(Object obj){
    …………
    }

    }

    //子对话框
    SonDialog extends JDialog{
    SuperFrame super;
    SonDialog (SuperFrame super){
    this.super = super;
    …………
    }


    public void actionPerfor…


    偶是这样用的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • channon
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-02 09:02:2217楼 得分:0
    SonDialog son = new SonDialog(this);
    son.show();

    可以写成

    new SonDialog(this).setVisible(true);
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • haoweishow01
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-02 20:01:0518楼 得分:0
    先收藏了,明天研究
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • youjianbo_han_87
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-05 17:01:4119楼 得分:0
    传过去的时候传对象的引用即可
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Robert_Jiang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-06 21:33:2920楼 得分:0
    兄弟: 你用构造函数啊,当你触发按钮时将你要处理的对象(主JFrame 对象--包含你要处理的对象类型为public)以参数的形式传到另一个JFram中,再处理,将主的JFrame 对象传回就可以了
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved