2019-08-15

关于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虚拟机。

感谢观看!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、OC基本数据类型 计算一下他们的取值范围: 以int 为例:int所在4个字节 1Btye = 8bit。 共...
    蓝童鞋阅读 2,405评论 0 0
  • 2019年已经过去一大半了,前两天刚查完二级建造师的成绩,真的是又紧张又刺激啊,毕竟等了那么多天好不容易出成绩...
    智达教育阅读 1,176评论 0 0
  • 正则的part3:主要操作(python) 3.1 生成正则表达式对象(compile) 这个compile方法实...
    Wencyyyyyy阅读 981评论 0 0
  • #生活# 文/小齐同学 不忍离开,或许留恋的是,曾经的美丽。 不忍离去,放不开那一份心中的温暖。 或许选择转身,那...
    小齐同学阅读 3,398评论 6 10
  • 本次讲rxSwift里的create机制 create是什么,就是创建。 就是自定义的方式来创建Observabl...
    卖毛玉的小贩阅读 2,498评论 0 0