Swing/TransparentFrame のバックアップの現在との差分(No.12)
TITLE:JInternalFrameを半透明にする
JInternalFrameを半透明にする
編集者:Terai Atsuhiro~
作成日:2007-04-30
更新日:2022-01-17 (月) 05:28:50
- category: swing folder: TransparentFrame title: JInternalFrameを半透明にする tags: [JInternalFrame, JDesktopPane, ContentPane, Transparent, Translucent] author: aterai pubdate: 2007-04-30T21:08:08+09:00 description: JInternalFrameのフレーム内を半透明にします。 image: hreflang:
href: https://java-swing-tips.blogspot.com/2011/02/translucent-jinternalframe-nimbus.html lang: en
概要
JInternalFrame
のフレーム内を半透明にします。
概要
JInternalFrameのフレーム内を半透明にします。Screenshot
Advertisement
#screenshot
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
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());
@Override protected 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) {
@Override protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setPaint(new Color(100,120,100,100));
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);
}
}
// g2.setPaint(new Color(100, 120, 100, 100));
g2.setPaint(texture);
g2.fillRect(0, 0, getWidth(), getHeight());
}
};
#spandel
#spanend
#spanadd
#spanend
protected JInternalFrame createFrame(JPanel panel) {
MyInternalFrame frame = new MyInternalFrame();
if(panel!=null) {
if (panel != null) {
frame.setContentPane(panel);
// JButton button = new JButton("button");
// button.setOpaque(false);
panel.add(new JLabel("label"));
panel.add(new JButton("button"));
}
desktop.add(frame);
frame.setOpaque(false);
frame.setVisible(true);
//......
// ...
- &jnlp;
- &jar;
- &zip;
解説
各フレームは、JInternalFrame#setContentPane(Container)メソッドを使用して、ContentPaneを以下のような半透明パネルに変更しています。解説
上記のサンプルでは、各JInternalFrame
のContentPane
をJInternalFrame#setContentPane(Container)
メソッドを使用して半透明パネルに変更しています。
- Frame#1
- ContentPaneをsetOpaque(false)して透過しています。
-
Frame#1
(Transparent
)-
ContentPane
をsetOpaque(false)
して透明化
-
- Frame#2
- ContentPaneを半透明な色で塗りつぶしています。
-
Frame#2
(Translucent
)-
ContentPane
を半透明な色で塗りつぶし
-
- Frame#3
- ContentPaneを半透明な色を使ってチェック柄で塗りつぶしています。
-
Frame#3
(Translucent
)-
ContentPane
を半透明な色を使ってチェック柄で塗りつぶし
-
参考リンク
参考リンク
コメント
- JRE6.0だと、半透明にならずチェック模様が描画されるだけですね。仕様変わったのかな… --
- 御指摘ありがとうございます。Windows XP で、Java 1.6.0_01、1.5.0_11 は、半透明になったのですが、Ubuntu 7.04 で、Java 1.6.0 では駄目みたいです。Macは環境がないので試せてません。 -- terai
- すこし調べてみたのですが、Ubuntu(GNOME) でも半透明にするにはJInternalFrame#setOpaque(false) も必要みたいです。修正しておきます。 -- terai
- 再度試してみたら、JInternalFrame#setOpaque(false)しても、Ubuntu(GNOME)+jdk1.6.0+GTK L&F で半透明になってくれません。
なにかUbuntuの設定を弄ったから?-- terai
- Nimbus L&F でも透明にできないようです。 -- terai
コメント
-
JRE6.0
だと、半透明にならずチェック模様が描画されるだけですね。仕様変わったのかな… --- 御指摘ありがとうございます。
Windows XP
、Java 1.6.0_01
、1.5.0_11
は半透明になったのですが、Ubuntu 7.04
、Java 1.6.0
では駄目みたいです。Mac
は環境がないので試せてません。 -- aterai - すこし調べてみたのですが、
Ubuntu
(GNOME
) でも半透明にするにはJInternalFrame#setOpaque(false)
も必要みたいです。修正しておきます。 -- aterai - 再度試してみたら、
JInternalFrame#setOpaque(false)
しても、Ubuntu
(GNOME
)+JDK 1.6.0
+GTKLookAndFeel
で半透明になってくれません。なにか-- ateraiUbuntu
の設定を弄ったから?
- 御指摘ありがとうございます。
-
NimbusLookAndFeel
でも透明にできないようです。どちらもSynthLookAndFeel
がベースなので、それが原因? -- aterai- 追記: SynthでJInternalFrameを半透明にする -- aterai