Я думаю, что это возможно только путем переопределения 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) {
}