Очистить TextField при нажатии кнопки - Java-апплет - PullRequest
0 голосов
/ 09 октября 2019

У меня есть 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»).

Но текстовые поля не очищаются.


Если я внесу следующие изменения в actionPerformed

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

тогда это работает. Но я не хочу там пробелов. Я хочу, чтобы текстовые поля были пустыми.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

просто оставьте пустым в текстовых полях.

public void actionPerformed(ActionEvent e) {
    name.getText();
    pass.getText();
    name.setText("");
    pass.setText("");
    repaint();
    revalidate();
}
0 голосов
/ 09 октября 2019

Возможно, это не очень хорошее решение, но это обходной путь. Перед установкой текста вызовите метод getText, и он будет сброшен. Довольно странно! Это поведение помечено как Ошибка на этой странице

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...