• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JPasswordFieldのエコー文字を変更
#navi(../)
*JPasswordFieldのエコー文字を変更 [#x1cc913a]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2006-12-11~
更新日:&lastmod;
Posted by [[terai]] at 2006-12-11

#contents

**概要 [#w010626f]
JPasswordFieldのエコー文字を独自の図形に変更します。

-&jnlp;
-&jar;
-&zip;

#screenshot

**サンプルコード [#bd030635]
#code{{
 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);
     }
   }
 }
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);
    }
  }
}
}}
-&jnlp;
-&jar;
-&zip;

**解説 [#vc509445]
上記のサンプルでは、下のJPasswordFieldのエコー文字を独自の図形に変更しています。またこの図形のサイズを上のJPasswordFieldのエコー文字と幅を合わせるために同じ文字をsetEchoCharしています。

//**参考リンク
**コメント [#n2314028]
#comment