关于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按钮已经添加了事件。运行结果如下:
关于TextFeild内容清空问题
文章图片

向框内输入字符串:root(或者其他字符)
关于TextFeild内容清空问题
文章图片

此时再点击重置按钮,但如论点多少次都没有作用。
重置按钮添加的事件代码如下:
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虚拟机。
感谢观看! 【关于TextFeild内容清空问题】

    推荐阅读