我想问下程序中的setInfo()和getInfo()它们怎调用的??
//程序1
package myprojects.testdialog;
import java.awt.*;
import java.awt.event.*;
class TestDialog extends Frame {
private TextField tf = new TextField(10);
//文本输入框
public TestDialog() {
Button b1 = new Button("打开模态对话框");
Button b2 = new Button("打开非模态对话框");
add(tf,"North"); //将文本输入框增加到北面
add(b1,"Center");//将b1放置到中间
add(b2,"East"); //b2放到东面
b1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{//以模态的方式打开对话框
MyDialog dlg = new MyDialog(TestDialog.this,"modal dialog",true);
// TestDialog.this调用外部类TestDialog
//假设对话框名称为MyDialog(拥有此对话框的拥有者,标题,T/F是否为模态对话框)
dlg.setInfo(tf.getText()); //设置子窗口打开时显示与主窗口一样的信息
//设置它的信息,,setInfo好像是用于Dialog窗口中的
dlg.setVisible(true);
//显示窗口
tf.setText(dlg.getInfo(/*方法用于返回关闭模态框后返回数据*/));
//设置到主框中
}
}
);
b2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{//以非模态的方式打开对话框
MyDialog dlg = new MyDialog(TestDialog.this,"modeless dialog",false);
// TestDialog.this调用外部类TestDialog
//假设对话框名称为MyDialog(拥有此对话框的拥有者,标题,T/F是否为模态对话框)
dlg.setInfo(tf.getText());
//设置它的信息
dlg.setVisible(true);
//显示窗口
//tf.setText(dlg.getInfo()); 因为是非模态它不等待子窗口关后才运行,而会立即运行
//设置到主框中
}
}
);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
}
public void setInfo(String strInfo)
{
tf.setText(strInfo);
}
public static void main(String args[]) {
System.out.println("Starting TestDialog...");
TestDialog mainFrame = new TestDialog();
mainFrame.setSize(400, 400);
mainFrame.setTitle("TestDialog");
mainFrame.setVisible(true);
}
}
/*
*运行过程:
*创好主窗口后,在文本标签设置一个tf.getText()利用它为子窗口设置第一次打开子窗口时显示的信息,
*调用方法进入MyDialog这个类设定子窗口里的内容
*/
//程序2
package myprojects.testdialog;
import java.awt.*; //为TextField
import java.awt.Dialog;
import java.awt.event.*;//为ActionListener
public class MyDialog extends Dialog {
private TextField tf = new TextField(10);
private String strInfo = null;
//拥有者为Frame owner,标题title
//定义一个构造函数,将它传递给父类Dialog
public MyDialog(Frame owner,String title,boolean modal)
{
super(owner,title,modal);
setBounds(0,0,200,150);
//设置窗口大小,还可设置窗口位置
Button b1 = new Button("应用");
Button b2 = new Button("确定");
this.add(tf,"North");
this.add(b1,"Center");
this.add(b2,"East");
if(this.isModal() == true) //判断是否为模态对话框
{
b1.setEnabled(false);
//设定b1不可用
}
b1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) //方法
{
((TestDialog)getOwner(/*得到它的拥有者*/)).setInfo(tf.getText());
//返回Owner,再返回主窗口
}
});
b2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) //方法
{
if(isModal() == true)
{
strInfo = new String(tf.getText());
}
else
{
((TestDialog/*主窗口名称*/)MyDialog.this.getOwner()).setInfo(tf.getText(/*取出当前标签内容*/));
//用getOwner()把当前标签内容返回到主窗口标签
//主窗口有一个方法setInfo()它自己会调用这个方法自己设定把当前标签内容设到主窗口
}
dispose();
}
});
}
public String getInfo()
{
return strInfo;
}
public void setInfo(String strInfo)
{
tf.setText(strInfo);
}
}