TITLE:JTextFieldの背景色を半透明にする

JTextFieldの背景色を半透明にする

Posted by terai at 2008-08-11
  • category: swing folder: TranslucentTextField title: JTextFieldの背景色を半透明にする tags: [JTextField, Translucent] author: aterai pubdate: 2008-08-11T12:27:41+09:00 description: JTextFieldの背景色を半透明にしても、文字列選択やキャレットの点滅などで描画が乱れないようにする方法をテストします。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTV03Q10yI/AAAAAAAAAoQ/xH8xmeARg4k/s800/TranslucentTextField.png

概要

JTextFieldの背景色を半透明にしても、文字列選択やキャレットの点滅などで描画が乱れないようにする方法をテストします。

概要

JTextFieldの背景色を半透明にします。

サンプルコード

#spanend
#spanadd
Color BG_COLOR = new Color(1f, .8f, .8f, .2f);
#spanend

-&jnlp;
-&jar;
-&zip;
#spandel

#spanend
#spandel
#screenshot
#spanend
#spandel

#spanend
#spandel
**サンプルコード [#taebf677]
#spanend
#spandel
#code{{
#spanend
#spandel
Color BG_COLOR = new Color(1f,.8f,.8f,.2f);
#spanend
#spandel

#spanend
#spandel
field0 = new JTextField("aaaaaaaaa");
#spanend
#spanadd
field0 = new JTextField("000000000");
#spanend
field0.setBackground(BG_COLOR);

#spandel
field1 = new JTextField("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
#spanend
#spanadd
field1 = new JTextField("111111111111111111");
#spanend
field1.setOpaque(false);
field1.setBackground(BG_COLOR);

#spandel
field2 = new JTextField("cccccccccccccccccccccc") {
#spanend
  @Override
  protected void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D)g;
#spanadd
field2 = new JTextField("22222222222222222222") {
#spanend
  @Override protected void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g.create();
    g2.setPaint(getBackground());
    g2.fillRect(0, 0, getWidth(), getHeight());
    g2.dispose();
    super.paintComponent(g);
  }
};
field2.setOpaque(false);
field2.setBackground(BG_COLOR);
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、それぞれアルファ値を使った背景色をJTextFieldに設定しています。

解説

上記のサンプルでは、それぞれアルファ値を使った半透明の背景色をJTextFieldに設定しています。
  • 上(field0)
    • 文字列を選択すると、再描画がおかしくなる
    • Nimbus L&F では、再現しない
  • 中(field1)
  • 下(field2)
    • setOpaque(false) とし、paintComponentをオーバーライドして、背景色を描画している
    • Nimbus L&F では、二重に描画される
  • 0: setOpaque(true)
    • 文字列を選択するとキャレットの点滅などの再描画で残像が表示されてしまう
    • NimbusLookAndFeelでは発生しない
  • 1: setOpaque(false)
  • 2: 1 + paintComponent
    • setOpaque(false)を設定、かつpaintComponent(...)メソッドをオーバーライドして背景色を描画

参考リンク

コメント

TranslucentTextField1.png
TranslucentTextField2.png

参考リンク

コメント