在对话框中访问不了框架的文本区,所以不能对文本区的内容进行更新。

解决方案 »

  1.   

    思想是:通过对话框输入user类的name和password域,并提取到对话框所属框架中的文本域输出。但是我在编辑对话框类中对话框的按钮响应事件时在ActionListener中的actionPerformed(ActionEvent e)不可以访问框架类的文本域。import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.awt.GridLayout;
    import java.awt.Label;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.*;public class dialogdataexchange {
    public static void main(String[] args) {
    // TODO 自动生成方法存根
    EventQueue.invokeLater(new Runnable()
    {
    public void run() {
    // TODO 自动生成方法存根 
    DialogFrame dframe=new DialogFrame();
    dframe.setSize(200,200);
    dframe.setVisible(true);

    }
    }); }}
    class DialogFrame extends JFrame{
    public DialogFrame() {
    // TODO 自动生成构造函数存根
    JMenuBar bar=new JMenuBar();
    setJMenuBar(bar);

    JMenu help=new JMenu("help");
    JMenuItem about=new JMenuItem("about");
    JMenuItem exit=new JMenuItem("exit");

    ;

    about.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e) {
    if(dialog==null)
    dialog=new  Dialogclass(DialogFrame.this);
    dialog.setVisible(true);


    }
    });

    exit.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e) {
    // TODO 自动生成方法存根
    System.exit(0);
    }
    });

    help.add(about);
    help.add(exit);
    bar.add(help);
    add(info,BorderLayout.CENTER);


    }

    public JTextArea info=new JTextArea("text:\n");
    private Dialogclass dialog;


       


    }class Dialogclass extends JDialog
    {

    public Dialogclass(JFrame owner) {
    super(owner,"the dialog test",true);
    //panel
    JPanel panel1=new JPanel();
    panel1.setLayout(new GridLayout(2,2));
       panel1.add(new Label("name:"));
       final JTextField nametext=new JTextField();
       panel1.add(nametext);
       panel1.add(new Label("password"));
       final JTextField passwordtext=new JTextField();
       panel1.add(passwordtext);
       add(panel1,BorderLayout.CENTER);
       
       //panel2
       JButton insert=new JButton("insert");
       insert.addActionListener(new ActionListener()
       {
       public void actionPerformed(ActionEvent e) {
       

    String name=new String(nametext.getText());
    char[] password=passwordtext.getText().toCharArray();
    user u=new user(name,password);
    System.out.println("name:"+name+"  password:"+new String(password));
    nametext.setText("");
    passwordtext.setText("");

       });
       
       
       JButton close=new JButton("close");
       close.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent e) {
    setVisible(false);

    }
       });
       JPanel p=new JPanel();
       p.setLayout(new GridLayout(1,2));
       p.add(close);
       p.add(insert);
       add(p,BorderLayout.SOUTH);
       
       setSize(200,200);
    }
    }
    class user
    {
    public user(String name,char[] password) {
     this.name=name;
     this.password=password;

    }public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public char[] getPassword() {
    return password;
    }
    public void setPassword(char[] password) {
    this.password = password;
    }
    String name;
    char[] password;
    }