Это на самом деле не полный ответ, а скорее дискуссия, и я не знаю ни одного готового виджета, который мог бы это сделать.
Моя первая идея состояла в том, чтобы унаследовать виджет SWT Text и переопределить setEchoChar и др., Но после просмотра кода это на самом деле не представляется возможным, потому что этот метод является просто оболочкой:
OS.SendMessage (handle, OS.EM_SETPASSWORDCHAR, echo, 0);
Если кто-то и знает низкоуровневую реализацию для конкретной ОС, это может быть полезно.
В любом случае, перейдем к другому подходу.Я бы избегал KeyListener и использовал бы ModifyListener в Text-Widget.
void addModifyListener(ModifyListener listener)
Затем вы могли бы создать оболочку, которая ловит введенный текст с помощью этого слушателя, добавляет его в локально хранящийся строку / строковый буфер (илинапример, хранилище настроек Eclipse) и отправьте измененный полный текст в виджет «Текст» с помощью setText (String s), заменив все символы, кроме последнего, символом эха (например, *).
myText.setText((s.substring(0, s.length()-1)).replaceAll("[\\s\\S]","*")+s.charAt(s.length()-1));
Это немного клудж, но это должно сработать.
Не очень простой бит - это синхронизация в 1 секунду, без остановки всего вида ...