关于TextFeild内容清空问题

关于TextFeild内容清空问题

在编写GUI调试的过程中,有时候想使用Button对TextField框已经输入的内容进行重置(清除)时,却无法起到作用,点击Button按钮没有任何反应,但是Button的添加的事件没有编译错误。


事例代码:
import java.awt.*;
import java.awt.event.*;

public class Test{
	public static void main(String[] agrs){
		Frame f = new Frame("It is for test"); // 创建Frame窗口
		Panel p = new Panel();
		Label l = new Label("用户");
		TextField t = new TextField(10);
		Button b = new Button("重置");
		p.add(l);
		p.add(t);
		f.add(p);
		f.add(b,BorderLayout.SOUTH);
		f.setSize(260,100);
		f.setVisible(true);
		f.addWindowListener(new WindowAdapter() {
      			public void windowClosing(WindowEvent e) {
      				System.exit(0);
      			}
      		});
      		b.addActionListener(new ActionListener() {
      			public void actionPerformed(ActionEvent e) {
      				t.setText("");//设置TextField内容为""。
      		         }
      		 });
 	}
}
上述代码中的有一个TextField的文本框和一个Button按钮,并且Button按钮已经添加了事件。运行结果如下:

在这里插入图片描述

向框内输入字符串:root(或者其他字符)

在这里插入图片描述

此时再点击重置按钮,但如论点多少次都没有作用。

重置按钮添加的事件代码如下:
 b.addActionListener(new ActionListener() {      
 	public void actionPerformed(ActionEvent e) {        
 		t.setText("");//设置TextField内容为""。      
 	}    
 });
事件是按下按钮后调用TextField的setText()方法重置内容填写方法传入的参数为""(两个双引号之间没有任何字符)。

  • 猜测:JVM虚拟机与GUI界面临时内存不同步。
    即GUI界面输入的内容没有及时同步储存到JVM临时内存中,此时直接setText("")方法传入的参数"“与JVM临时内存中的默认参
    数”“相同,所以setText(”"),所以没有起到作用。

  • 解决方法:先改变JVM临时内存中的默认参数"",然后再调用setText("")方法重置。
    那该怎么改变JVM内存呢?可以先调用getText(""),让JVM虚拟机获取输入的字符串:root (或者其他
    字符),这样JVM虚拟机的内存中的默认参数"“已将改变,此时再使用setText(”"),就可以重置成功。

修改代码如下:

b.addActionListener(new ActionListener() {      
	public void actionPerformed(ActionEvent e) {        
		t.getText();        
		t.setText("");      
	}    
});

这样一来就可以重置刚才输入的字符串:root(或者其他字符)。

只要达成改变JVM中虚拟机的内存中TextField的默认字符串"",此时setText("")就可以起到作用。

按照上述理论同样可以这样改写代码:
 b.addActionListener(new ActionListener() {      
 	public void actionPerformed(ActionEvent e) {        
 		t.setText("任意字符串");        
 		t.setText("");      
 	}    
 });  
  • 总结:JVM虚拟机的临时内存与GUI界面的不同步。导致setText("")失效。上述仅使个人观点,如有错误可以向后台回复。若了解更多可以深入了解学习JVM虚拟机。

感谢观看!

你可能感兴趣的:(JAVA)