Очистка содержимого TextField с использованием setText не работает в AWT

У меня проблемы с очисткой содержимого TextField в AWT используя setText() метод. По-видимому, setText("") не очищает содержимое TextField при нажатии кнопки "Сброс". Вот моя программа:

import java.awt.*;
import java.awt.event.*;

public class form extends Frame
{

    Label lbl = new Label("Name:");
    TextField tf = new TextField();
    Button btn = new Button("Reset");

    public form()
    {
        tf.setColumns(20);

        addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });


        btn.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent e) 
            {
               tf.setText("");  //Problem occurs here. This does not clear the contents of the text field on pressing the 'Reset' button.

            }
        });


        add(lbl);
        add(tf);
        add(btn);

        setLayout(new FlowLayout());
        setSize(400,100);
        setVisible(true);
        setTitle("Form");

    }


    public static void main(String[] args) 
    {
        new form();
    }

}

Может кто-нибудь сказать мне, где я ошибся, или предложить альтернативу? Благодарю.

2 ответа

Решение

Я также вижу проблему с использованием Java 8u11. Кажется, я помню, что это было зарегистрировано как известная ошибка, но сейчас я не могу ее найти.

Решение, которое работает для меня, это добавить промежуточный шаг:

public void actionPerformed(ActionEvent e) {
   tf.setText(" ");  
   tf.setText("");
}

Я не уверен, почему это необходимо, я думаю, что это ошибка с функцией setText(), специально игнорирующей пустые строки. Если кто-то найдет зарегистрированную ошибку, там будет больше информации.

Добавьте пробел в setText(" ") в функции и посмотрите, работает ли он. Но там после будет один пробел.

Другие вопросы по тегам