TITLE:JInternalFrameを半透明にする
#navi(../)
*JInternalFrameを半透明にする [#dc212a57]
Posted by [[terai]] at 2007-04-30

#contents

**概要 [#f96c0721]
JInternalFrameのフレーム内を半透明にします。

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

#screenshot

**サンプルコード [#w6d0f503]
#code{{
JPanel p1 = new JPanel();
p1.setOpaque(false);

JPanel p2 = new JPanel() {
  public void paintComponent(Graphics g) {
    //super.paintComponent(g);
    g.setColor(new Color(100,50,50,100));
    g.fillRect(0,0,getWidth(), getHeight());
  }
};

JPanel p3 = new JPanel() {
  public void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    //g2.setPaint(new Color(100,120,100,100));
    g2.setPaint(texture);
    g2.fillRect(0,0,getWidth(),getHeight());
    //int cs = 4;
    //for(int i=0;i*cs<getWidth();i++) {
    //  for(int j=0;j*cs<getHeight();j++) {
    //    if((i+j)%2==0) g2.fillRect(i*cs, j*cs, cs, cs);
    //  }
    //}
  }
};
}}
#code{{
protected JInternalFrame createFrame(JPanel panel) {
  MyInternalFrame frame = new MyInternalFrame();
  if(panel!=null) {
    frame.setContentPane(panel);
    panel.add(new JLabel("label"));
    panel.add(new JButton("button"));
  }
  desktop.add(frame);
  frame.setOpaque(false);
  frame.setVisible(true);
  //......
}}

**解説 [#z8b1a843]
各フレームは、JInternalFrame#setContentPane(Container)メソッドを使用して、ContentPaneを以下のような半透明パネルに変更しています。

-Frame#1 (Transparent)
--ContentPaneをsetOpaque(false)して透過しています。

-Frame#2 (Translucent)
--ContentPaneを半透明な色で塗りつぶしています。

-Frame#3 (Translucent)
--ContentPaneを半透明な色を使ってチェック柄で塗りつぶしています。

**参考リンク [#a3727514]
-[[デジタル出力工房 絵写楽>http://www.bekkoame.ne.jp/~bootan/free2.html]]

**コメント [#vc94b782]
- JRE6.0だと、半透明にならずチェック模様が描画されるだけですね。仕様変わったのかな… --  &new{2007-05-25 (金) 11:05:17};
-- 御指摘ありがとうございます。Windows XP で、Java 1.6.0_01、1.5.0_11 は、半透明になったのですが、Ubuntu 7.04 で、Java 1.6.0 では駄目みたいです。Macは環境がないので試せてません。 -- [[terai]] &new{2007-05-25 (金) 13:02:13};
-- すこし調べてみたのですが、Ubuntu(GNOME) でも半透明にするにはJInternalFrame#setOpaque(false) も必要みたいです。修正しておきます。 -- [[terai]] &new{2007-05-25 (金) 13:07:50};
-- 再度試してみたら、JInternalFrame#setOpaque(false)しても、Ubuntu(GNOME)+jdk1.6.0+GTK L&F で半透明になってくれません。%%なにかUbuntuの設定を弄ったから?%% -- [[terai]] &new{2007-10-10 (水) 18:49:22};
- Nimbus L&F でも透明にできないようです。 -- [[terai]] &new{2007-11-15 (木) 13:32:50};

#comment