Swing/PasswordView のバックアップの現在との差分(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/PasswordView へ行く。
- 1 (2006-12-11 (月) 14:51:59)
- 2 (2006-12-16 (土) 20:29:10)
- 3 (2007-08-30 (木) 14:37:02)
- 4 (2008-06-05 (木) 09:30:22)
- 5 (2008-06-05 (木) 11:13:37)
- 6 (2009-03-26 (木) 20:52:03)
- 7 (2012-08-03 (金) 16:09:13)
- 8 (2014-12-03 (水) 15:56:35)
- 9 (2015-03-03 (火) 23:34:35)
- 10 (2017-01-18 (水) 19:46:47)
- 11 (2017-12-15 (金) 14:31:44)
- 12 (2019-08-08 (木) 18:59:10)
- 13 (2021-04-08 (木) 13:29:33)
- 14 (2022-08-27 (土) 23:43:15)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JPasswordFieldのエコー文字を変更 #navi(../) *JPasswordFieldのエコー文字を変更 [#x1cc913a] >編集者:[[Terai Atsuhiro>terai]]~ 作成日:2006-12-11~ 更新日:&lastmod; --- category: swing folder: PasswordView title: JPasswordFieldのエコー文字を変更 tags: [JPasswordField, Icon] author: aterai pubdate: 2006-12-11T14:51:59+09:00 description: JPasswordFieldのエコー文字を独自のIcon図形に変更します。 image: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTQ8cs8ApI/AAAAAAAAAgY/gxUUdKI65yA/s800/PasswordView.png --- * 概要 [#summary] `JPasswordField`のエコー文字を独自の`Icon`図形に変更します。 #contents #download(https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTQ8cs8ApI/AAAAAAAAAgY/gxUUdKI65yA/s800/PasswordView.png) **概要 [#w010626f] JPasswordFieldのエコー文字を独自の図形に変更します。 * サンプルコード [#sourcecode] #code(link){{ 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(); } #screenshot @Override public View create(Element elem) { return new MyPasswordView(elem); } **サンプルコード [#bd030635] class MyPasswordFieldUI extends BasicPasswordFieldUI { public View create(Element elem) { return new MyPasswordView(elem); } class MyPasswordView extends PasswordView{ public MyPasswordView(Element element) { super(element); } protected int drawEchoCharacter(Graphics g, int x, int y, char c) { Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); FontMetrics fm = g2d.getFontMetrics(); int r = fm.charWidth(c)-4; //g2d.setPaint(Color.GRAY); g2d.drawRect(x+2, y+4-fm.getAscent(), r, r); //g2d.setPaint(Color.GRAY.brighter()); g2d.fillOval(x+2, y+4-fm.getAscent(), r, r); return x + fm.charWidth(c); } } } 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); } -&jnlp; -&jar; -&zip; public MyPasswordView(Element element) { super(element); } } } }} **解説 [#vc509445] 上記のサンプルでは、下のJPasswordFieldのエコー文字を独自の図形に変更しています。 * 解説 [#explanation] - 上: `setEchoChar('\u2605')` -- `JPasswordField#setEchoChar(...)`メソッドで任意の文字をエコー文字に設定 - 下: `drawEchoCharacter` -- `PasswordView#drawEchoCharacter(...)`をオーバーライドして任意の図形をエコー文字として描画する`BasicPasswordFieldUI`を作成し`JPasswordField`に設定 -- 上の`JPasswordField`のエコー文字と同じ文字を`setEchoChar`で設定し図形のサイズを合わせる 上のJPasswordFieldのエコー文字と幅を合わせるために同じ文字をsetEchoCharしています。 * 参考リンク [#reference] - [[JPasswordFieldでパスワードを可視化する>Swing/ShowHidePasswordField]] - [https://bugs.openjdk.org/browse/JDK-6852577 [JDK-6852577] Only for Nimbus LAF UIManager.get("PasswordField.echoChar") is null - Java Bug System] //**参考リンク **コメント [#n2314028] * コメント [#comment] #comment #comment