TITLE:JFrameを半透明化
Posted by terai at 2010-06-14

JFrameを半透明化

JFrameを半透明にします。
  • category: swing folder: WindowOpacity title: JFrameを半透明化 tags: [JFrame, Translucent, Transparent, JRootPane, ContentPane, TexturePaint] author: aterai pubdate: 2010-06-14T14:13:21+09:00 description: JFrameのタイトルや子コンポーネントを除く背景が半透明になるよう設定します。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTWw2d9LNI/AAAAAAAAApw/NXG2EcaSv_s/s800/WindowOpacity.png hreflang:
       href: https://java-swing-tips.blogspot.com/2010/06/translucent-jframe.html
       lang: en

概要

JFrameタイトルや子コンポーネントを除く背景が半透明になるよう設定します。

#screenshot

サンプルコード

#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
#spandel
//com.sun.awt.AWTUtilities.setWindowOpacity(frame, .5f);
#spanend
#spandel
com.sun.awt.AWTUtilities.setWindowOpaque(frame, false);
#spanend
#spanadd
// com.sun.awt.AWTUtilities.setWindowOpacity(frame, .5f);
#spanend
#spanadd
// com.sun.awt.AWTUtilities.setWindowOpaque(frame, false); // Java 6
#spanend
#spanadd
frame.setBackground(new Color(0x0, true));
#spanend
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
#spanadd

#spanend
JPanel p = new JPanel();
p.add(new JButton("JButton"));
#spandel
p.setBackground(new Color(.5f,.8f,.5f,.5f));
#spanend
#spanadd
p.setBackground(new Color(.5f, .8f, .5f, .5f));
#spanend
#spanadd

#spanend
frame.getContentPane().add(p);
frame.setSize(320, 240);
frame.setLocationRelativeTo(null);
frame.setVisible(true);

解説

com.sun.awt.AWTUtilities.setWindowOpacity(frame, .5f);を使ってWindowを半透明化するとJFrameなどのタイトルバーや子コンポーネントまで半透明化されるので、代わりに上記のサンプルでは以下のようにして半透明化を行っています。

解説

com.sun.awt.AWTUtilities.setWindowOpacity(frame, .5f);を使って半透明化すると、フレームのタイトルバーや、子コンポーネントまで半透明化されるので、代わりに上記のサンプルでは以下のようにして半透明化を行っています。
  • JFrame.setDefaultLookAndFeelDecorated(true);で、タイトルパーなどをJRootPaneに描画
  • com.sun.awt.AWTUtilities.setWindowOpaque(frame, false);でJFrameを完全に透明化
  • ContentPaneにsetBackground(new Color(.5f,.8f,.5f,.5f));で半透明の背景色を設定したパネルを追加
  • JFrame.setDefaultLookAndFeelDecorated(true);でタイトルバーなどをJRootPaneに描画
  • com.sun.awt.AWTUtilities.setWindowOpaque(frame, false);JFrameを完全に透明化
    • JDK 1.7.0の場合は、代わりにframe.setBackground(new Color(0x0, true));
  • ContentPanesetBackground(new Color(.5f, .8f, .5f, .5f));で半透明の背景色を設定したパネルを追加

参考リンク

参考リンク

コメント

  • そんな簡単にできるんですね!昔画面キャプチャしたり色々苦労した結果断念しました; -- riki

コメント