以下是引用annon在2004-12-10 11:03:34的发言:
把程序
public void actionPerformed(ActionEvent e)
{
button.text2.setText("ok!");
button.text1.setText(button.getLabel());
} 变成
public void actionPerformed(ActionEvent e)
{
button.text2.setText("ok!");
// button.text1.setText(button.getLabel());
} 后
在text1中输入文本字,text2就会出现一样的字;
就执行:
public void textValueChanged(TextEvent e)
{
text2.setText(text1.getText());
}
但是我点击按钮"电击看我能发生什么?"时:
第一次点击:两个文本都为空;
第二次点击:text1为空,text2为"ok!"
这个过程又怎么解释?
当然,从text1空文本点击"电击看我能发生什么?"时执行:
public void actionPerformed(ActionEvent e)
{
button.text2.setText("ok!");
}
结果都一样:
text1为空, text2为"ok!".
这是因为你设的
public void actionPerformed(ActionEvent e)
{
text1.setText(null);
}
null的缘故,但是这个程序蹊跷之处就在于此,当第一次点击按钮时,执行了
public void actionPerformed(ActionEvent e)
{
button.text2.setText("ok!");
}
这个部分设置为ok!,而后Button执行了自己类的事件代码,
public void textValueChanged(TextEvent e)
{
text2.setText(text1.getText());
}
public void actionPerformed(ActionEvent e)
{
text1.setText(null);
}
把text1设置为空,而这时text1.addTextListener(this);
因为这句话
使得text2也变为空,这时触发了textValueChanged事件。
第2次点击时
public void actionPerformed(ActionEvent e)
{
button.text1.setText(button.getLabel());
button.text2.setText("ok!");
}
同样先执行这段代码把text2变成"ok!",然后Button还继续执行自己的事件代码。
蹊跷之处就在这时,
public void actionPerformed(ActionEvent e)
{
text1.setText(null);
}
button本身的这个事件被触发设置为空,但是前一次的结果也是空。
而出现了
public void textValueChanged(TextEvent e)
{
text2.setText(text1.getText());
}
这个事件没有被执行的现象,因为这时并没有触发text1的textValueChanged事件。
这个肯定与null有关,因为如果不是text1.setText(null);如果换成text1.setText(“123“);的情况无论如何都会触发
public void textValueChanged(TextEvent e)
{
text2.setText(text1.getText());
}
这个事件,也就会出现两个文本框都一样文字的情况。也就是关键在于text1.setText(null);两次按钮单击都会变为空,而正是因为空值所以
public void textValueChanged(TextEvent e)
{
text2.setText(text1.getText());
}
这个事件没有被触发。