java 如何在jDialog里调用jFrame的组件
一个通讯录,jFrame用来显示联系人信息,点击jFrame里的添加按钮弹出jDialog添加联系人信息,按确认后关闭jDialog并将刷新jFrame里的数据。目前就是...
一个通讯录,jFrame用来显示联系人信息,点击jFrame里的添加按钮弹出jDialog 添加联系人信息,按确认后关闭jDialog并将刷新jFrame里的数据。目前就是不懂如何在jDialog里调用jFrame相关函数来刷新数据。
展开
3个回答
展开全部
//问题的关键在于,如何从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);
}
}
展开全部
正确的操作是获取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("取消");
没有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的数据也是没有意义的.
没有JDialog里, 这个概念, 你这个思路有问题.
Dialog理论上应该是模态操作, 所以在Dialog关闭前更新Frame的数据也是没有意义的.
追问
嗯,那应该是关闭后更新jFrame吧。我的数据是存放在一个addressBook类里面,点击jDialog的save按钮保存到addressBook里,不用直接获取jDialog的数据,那如何监听jDialog的关闭事件来实现关闭后更新jFrame呢?
追答
JDialog本身支持模态显示, 构造Dialog的时候传入父容器和true(开启模态)
这样在Dialog关闭后后面的代码才会继续执行
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询