按下按钮时清除TextField-Java Applet

时间:2019-10-09 08:37:36

标签: java applet

我有一个用于登录表单的Java Applet。它具有2个TextFields,用户名和密码。我需要点击Reset按钮来清除它们。这是我编写的代码。

  public class LoginForm extends Applet implements ActionListener
  {
    TextField name, pass, hidden;
    Button b1, b2;

    public void init()
    {
        name = new TextField(20);
        pass = new TextField(20);

        b2 = new Button("Reset");

        add(name);
        add(pass);
        add(b2);

        b2.addActionListener(this);
    }

    public void paint(Graphics g)
    {
        g.drawString("Hello", 10, 150);
    }

    public void actionPerformed(ActionEvent e) {
        System.out.println(e);

        name.setText("");
        pass.setText("");

        repaint();
    }
  }

但这不能正常工作。

一旦我单击Reset按钮,就会调用actionPerformed()方法,它也会调用repaint()。 (我可以看到正在显示“ Hello”。)

但是不会清除文本字段。


如果我在actionPerformed中进行了以下更改

        name.setText(" ");  // please note the spaces
        pass.setText(" ");

然后它起作用。但我不要在那里放空。我希望TextFields为空。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

可能不是很好的解决方案,但这是一种解决方法。在设置文本调用getText方法之前,它将重置。真奇怪!此行为在此page

上被标记为Bug
public void actionPerformed(ActionEvent e) {
    System.out.println(e);
    name.getText();
    pass.getText();

    name.setText("");
    pass.setText("");

    repaint();
    revalidate();
}

另一种解决方案是使用空格设置文本。但是如果您的密码类似字段包含setEchoChar('*'),则不会。

public void actionPerformed(ActionEvent e) {
    System.out.println(e);

    name.setText(" ");
    pass.setText(" ");

    repaint();
    revalidate();
}

答案 1 :(得分:0)

只需在文本字段中留空即可。

public void actionPerformed(ActionEvent e) {
    name.getText();
    pass.getText();
    name.setText("");
    pass.setText("");
    repaint();
    revalidate();
}