java 如何在jDialog里调用jFrame的组件

一个通讯录,jFrame用来显示联系人信息,点击jFrame里的添加按钮弹出jDialog添加联系人信息,按确认后关闭jDialog并将刷新jFrame里的数据。目前就是... 一个通讯录,jFrame用来显示联系人信息,点击jFrame里的添加按钮弹出jDialog 添加联系人信息,按确认后关闭jDialog并将刷新jFrame里的数据。目前就是不懂如何在jDialog里调用jFrame相关函数来刷新数据。 展开
 我来答
fuhaiwei
2013-12-02 · TA获得超过3409个赞
知道大有可为答主
回答量:974
采纳率:75%
帮助的人:1366万
展开全部
//问题的关键在于,如何从jDialog中获取jFrame的引用。
//我是用内部类的形式解决该问题的。而且直接操作jFrame的组件。
//还可以在新建自定义jDialog类时,传入jFrame的引用。
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class FrameTest extends JFrame {
    private JTextArea textArea;

    public static void main(String[] args) {
        new FrameTest();
    }

    public FrameTest() {
        this.setSize(400, 300);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        initPanel();
        this.setVisible(true);
    }

    private void initPanel() {
        JButton button = new JButton("Add");
        textArea = new JTextArea();
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                openDialog();
            }
        });
        this.add(button, BorderLayout.NORTH);
        this.add(textArea, BorderLayout.CENTER);
    }

    private void openDialog() {
        final JDialog dialog = new JDialog(this, true);
        dialog.setSize(300, 200);
        dialog.setLocation(getX() + 50, getY() + 50);
        dialog.setLayout(new GridLayout(3, 2));
        final JTextField name = new JTextField(10);
        final JTextField phone = new JTextField(10);
        JButton save = new JButton("保存");
        JButton cancel = new JButton("取消");
        save.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                textArea.append(name.getText() + ":" + phone.getText() + "\n");
                dialog.dispose();
            }
        });
        cancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dialog.dispose();
            }
        });

        dialog.add(new JLabel("姓名:"));
        dialog.add(name);
        dialog.add(new JLabel("电话:"));
        dialog.add(phone);
        dialog.add(save);
        dialog.add(cancel);
        dialog.setVisible(true);
    }
}
pieryon
2015-07-11 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14411 获赞数:166861
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部
正确的操作是获取JDialog上的组件, 取数据, 放到JFrame上.
没有JDialog里, 这个概念, 你这个思路有问题.
Dialog理论上应该是模态操作, 所以在Dialog关闭前更新Frame的数据也是没有意义的。

参考代码如下:
import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextArea;import javax.swing.JTextField;public class FrameTest extends JFrame { private JTextArea textArea; public static void main(String[] args) { new FrameTest(); } public FrameTest() { this.setSize(400, 300); this.setDefaultCloseOperation(EXIT_ON_CLOSE); initPanel(); this.setVisible(true); } private void initPanel() { JButton button = new JButton("Add"); textArea = new JTextArea(); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openDialog(); } }); this.add(button, BorderLayout.NORTH); this.add(textArea, BorderLayout.CENTER); } private void openDialog() { final JDialog dialog = new JDialog(this, true); dialog.setSize(300, 200); dialog.setLocation(getX() + 50, getY() + 50); dialog.setLayout(new GridLayout(3, 2)); final JTextField name = new JTextField(10); final JTextField phone = new JTextField(10); JButton save = new JButton("保存"); JButton cancel =new JButton("取消");
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-12-02
展开全部
正确的操作是获取JDialog上的组件, 取数据, 放到JFrame上.
没有JDialog里, 这个概念, 你这个思路有问题.
Dialog理论上应该是模态操作, 所以在Dialog关闭前更新Frame的数据也是没有意义的.
追问
嗯,那应该是关闭后更新jFrame吧。我的数据是存放在一个addressBook类里面,点击jDialog的save按钮保存到addressBook里,不用直接获取jDialog的数据,那如何监听jDialog的关闭事件来实现关闭后更新jFrame呢?
追答
JDialog本身支持模态显示, 构造Dialog的时候传入父容器和true(开启模态)
这样在Dialog关闭后后面的代码才会继续执行
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式