按下按钮时清除 TextField - Java Applet

Clear TextField on button press - Java Applet

我有一个 Java 小程序用于登录表单。它有 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")。

但是 TextFields 没有被清除。


如果我在 actionPerformed

中进行以下更改
        name.setText(" ");  // please note the spaces
        pass.setText(" ");

然后就可以了。但我不希望那里有空格。我希望 TextFields 变为空白。

感谢任何帮助。

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

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

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

    repaint();
    revalidate();
}

另一种解决方案是使用 space 设置文本。但如果你有类似密码的字段,其中有 setEchoChar('*').

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

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

    repaint();
    revalidate();
}

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

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