JPasswordFieldのエコー文字を変更
Total: 8613
, Today: 3
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JPasswordField
のエコー文字を独自のIcon
図形に変更します。
Screenshot
Advertisement
サンプルコード
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 in GitHub: Java, Kotlin解説
- 上:
setEchoChar('\u2605')
JPasswordField#setEchoChar(...)
メソッドで任意の文字をエコー文字に設定
- 下:
drawEchoCharacter
PasswordView#drawEchoCharacter(...)
をオーバーライドして任意の図形をエコー文字として描画するBasicPasswordFieldUI
を作成しJPasswordField
に設定- 上の
JPasswordField
のエコー文字と同じ文字をsetEchoChar
で設定し図形のサイズを合わせる
参考リンク
- JPasswordFieldでパスワードを可視化する
- [JDK-6852577] Only for Nimbus LAF UIManager.get("PasswordField.echoChar") is null - Java Bug System