概要

JPasswordFieldのエコー文字を独自のIcon図形に変更します。

サンプルコード

class MyPasswordFieldUI extends BasicPasswordFieldUI {
  private static final StarIcon ICON = new StarIcon();
  public static MyPasswordFieldUI createUI(JPasswordField c) {
    c.setEchoChar('\u25A0'); //As wide as a CJK character cell (fullwidth)
    return new MyPasswordFieldUI();
  }
  @Override public View create(Element elem) {
    return new MyPasswordView(elem);
  }
  private static class MyPasswordView extends PasswordView {
    @Override protected int drawEchoCharacter(
        Graphics g, int x, int y, char c) {
      FontMetrics fm = g.getFontMetrics();
      ICON.paintIcon(null, g, x, y - fm.getAscent());
      return x + ICON.getIconWidth(); //fm.charWidth(c);
    }
    public MyPasswordView(Element element) {
      super(element);
    }
  }
}
view all

解説

  • 上: setEchoChar('\u2605')
    • JPasswordField#setEchoChar(...)メソッドで任意の文字をエコー文字に設定
  • 下: drawEchoCharacter
    • PasswordView#drawEchoCharacter(...)をオーバーライドし、任意の図形をエコー文字として描画するBasicPasswordFieldUIを作成し、JPasswordFieldに設定
    • 上のJPasswordFieldのエコー文字と同じ文字をsetEchoCharで設定し、図形のサイズを合わせる

参考リンク

コメント