JPasswordFieldもどき

備忘録:Java JPasswordFieldもどき
GALAcTTERのパスワード入力でJPasswordFieldを使うようにしたのに、
ubuntu(特定の環境?)だとパスワード入力が出来ないことが判明ヽ(`Д´)ノムッキー
腹が立ったのでJTextFieldを無理矢理JPasswordFieldもどきにしてみた。


当初、パスワード入力の際の入力内容のマスクの基本的な目的は、
ディスプレイから読み取られてしまうことの回避であると考えた。
なので
「JTextFieldのForegroundColorをBackgroundColorと
一緒にしちゃえばそれでいいんじゃね(・∀・)?」
と考えた。


そもそもパスワードの入力で文字列を選択状態にしたりコピーしたりしない。
そんなことする人がいたら「変だよーお兄ちゃん変だよーヽ( ・∀・)ノ」とキヨタンが
騒ぎ出して殺意が芽生えるに相違ない。
まあでも
「おねえちゃん、あのね…(´・ω・`)」的万が一展開もあるなと考えてJTextFieldの
JavaDocを眺める。


setSelectionColor/setSelectedTextColor ( ・´ω・`)!!
とりあえずこれで選択されても画面上には表示されなくなった。
でもやっぱコピーできちゃうんだよなぁ…と色々とぐぐってみたら
JTextFieldでコピー、貼り付けなどを禁止というページにたどりついた。
このページを参考にしてコピーをさせないようにしてみた。

JTextField passwordField =new JTextField(){
  public void copy() {
    UIManager.getLookAndFeel().provideErrorFeedback(this);
    java.awt.Toolkit.getDefaultToolkit().beep();
  }
};
passwordField.setForeground(Color.white);
passwordField.setSelectionColor(Color.white);
passwordField.setSelectedTextColor(Color.white);

もしかしたら回避してコピーをしてしまう方法はあるのかもしれないけれど個人レベルの
ソフトならこのくらいでいいんじゃあるまいかと思った(・∀・)
本当はColor.whiteじゃなくてBackgroundColorを取得して指定するべきかも。
あれ、cutアクションも置き換えないと駄目かな?後でためそう。