Значение текстового поля преобразуется в символы звездочки, такие как поле редактирования пароля - PullRequest
2 голосов
/ 12 августа 2011

Я взял одно изображение пользовательского текстового поля, в этом текстовом поле я хочу показать «Введите пароль», и когда я сосредотачиваюсь на этом поле текстового поля и вводю любые символы, оно преобразуется в символы звездочки, такие как поле редактирования пароля.

Я хочу вот так ниже Изображение:

password Box

Ответы [ 2 ]

2 голосов
/ 05 января 2012

Я думаю, что это возможно только путем переопределения paint(..) из Editfield. Может быть следующие шаги могут достичь желаемого поведения:

  • Сохранить исходный текст в локальной переменной.
  • Создание поддельного текста в зависимости от состояния фокуса, исходного текста и т. Д.
  • Позвоните super.paint(..), оно закрасит поле поддельным текстом.
  • Используйте setText(..) для возврата исходного текста.


Проект реализации:

class MyEditField extends EditField {
    private final static String INIT_TEXT = "Enter Password";

    protected void paint(Graphics graphics) {
        String originalText = getText();
        String fakeText = originalText;

        if (originalText.equalsIgnoreCase("")) {
            fakeText = isFocus() ? originalText : INIT_TEXT;
        } else {
            fakeText = "";
            for (int i=0;i<originalText.length();i++) {
                fakeText += '*';
            }
        }

        setText(fakeText);
        super.paint(graphics);          
        setText(originalText);
    }
}


Приведенный выше код не рисует границы.


Нам нужно установить монохромный шрифт для проблемы, которую вы упомянули в комментарии. Вот пример кода:

MyEditField me = new MyEditField();

try {
    Font font = null;
    FontFamily fontFamily[] = FontFamily.getFontFamilies();
    for (int i=0;i<fontFamily.length; i++) {
        if (fontFamily[i].getName().equalsIgnoreCase("Courier New")) {
        font = fontFamily[i].getFont(FontFamily.SCALABLE_FONT, 
                            Font.getDefault().getHeight());
        me.setFont(font);
        break;
    }
    }
} catch (Exception e) {
}
1 голос
/ 12 августа 2011

Если я вас правильно понимаю, вам нужно использовать PasswordEditField .

Реализуйте его как любой LabelField, и он будет делать то, что вам нужно.


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...