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

感谢观看!

你可能感兴趣的:(2019-08-15)