这是为什么
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;class MyDialog extends JDialog {
private JLabel label = new JLabel("请输入姓名:");
private JTextField textField = new JTextField(10);
private JButton button = new JButton("OK");

public MyDialog(JFrame parent) {
super(parent, "提示", true);
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
contentPane.add(label);
contentPane.add(textField);

button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
contentPane.add(button);
pack();

}

public String getText() {return textField.getText();}
}public class DialogDemo extends JFrame {
private JButton button = new JButton("提交");
private MyDialog dialog = new MyDialog(this);
private TextField textField1 = new TextField(10);

public DialogDemo (String title) {
super(title);
textField1.setEditable(false);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dialog.setVisible(true);
textField1.setText(dialog.getText());
}
});

Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
contentPane.add(button);
contentPane.add(textField1);
setSize(500,300);
setVisible(true);
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);

}

public static void main(String args[]) {
new DialogDemo("DialogDemo");
}
}textField1.setText(dialog.getText());作为actionPerformed(ActionEvent e)的内容被添加到DialogDemo的button中,而MyDialog的button里添加的ActionListener(new ActionListener() )中的actionPerformed(ActionEvent e) 里只有一个释放dispose()方法,为什么把MyDialog关闭或按MyDialog的button却可以将信息显示到DialogDemo的textField1中

解决方案 »

  1.   

    我不知道这个dispose()是针对哪一个对象的,至于你关闭而能显示textField1内容是因为你调用了getText();那个myDialog实例应该成为null,要不然后面会报nullException
      

  2.   

    dialog.setVisible(true); // 当程序执行到这一句的时候,线程被dialog占用,直到dialog结束后面的代码才执行,那么你的dispose()刚好是结束对话框的显示,所以执行了下面的代码,从而把信息显示出来了。
    textField1.setText(dialog.getText()); 
      

  3.   

    dispose()
    不清楚这个针对的是哪个对象?本来写到action中应该是action被释放掉了