The JPasswordField included in Swing exhibits a strange behavior
it moves the caret to the right as far as the width of the character you already typed. The problem is that the component doesn't show that character, but only an asterisk (*). This, added to the fact that the field has the same default font as the JTextField (in NT, Arial) which is not of constant width, results in the visual effect that the caret doesn't move with the latest typed character, but only a little more.
This can be tested typing the string "mmmmmmmmm" (the character of maximum-width in Java). To fix this (a workaround), set the font property of the JPasswordField to a fixed-width (non-TrueType) font, for example: the monospaced font.