如何设置JPanel透明

wd9053 2009-09-11 02:28:33
在JFrame中添加背景图,可是JPanel会覆盖JFrame中的背景图,请问如何将JPanel设为透明
查到setOpaque方法,但不起作用,代码如下。

import java.awt.*;
import javax.swing.*;

class MyPanel extends JPanel
{
public MyPanel(boolean horizontal)
{
if (horizontal)
{
setPreferredSize(new Dimension(0, 40));
}
else
{
setPreferredSize(new Dimension(40, 0));
}
//setBackground(Color.BLUE);
setOpaque(false);//不起作用
}
}

public class Test extends JFrame
{
public Test()
{
add(new JButton("Test"));
add(new MyPanel(true), BorderLayout.NORTH);
add(new MyPanel(true), BorderLayout.SOUTH);
add(new MyPanel(false), BorderLayout.WEST);
add(new MyPanel(false), BorderLayout.EAST);

pack();
setVisible(true);
}

public void paint(Graphics g)
{
g.drawImage(getToolkit().getImage("back0.jpg"), 0, 0, getSize().width, getSize().height, this);
//super.paint(g);
paintComponents(g);
}

public static void main(String[] args)
{
new Test();
}
}
...全文
3628 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
SWAINY 2010-09-21
  • 打赏
  • 举报
回复
一同求解
wd9053 2009-09-11
  • 打赏
  • 举报
回复
重写repaint()方法,在repaint方法中让组件重绘即可
wd9053 2009-09-11
  • 打赏
  • 举报
回复
感谢11楼,代码看明白了。可以大家平时怎么画背景图呢?
justinavril 2009-09-11
  • 打赏
  • 举报
回复
请看我在JApplet给你实现的代码:

首先吧paint方法注释掉,并且注释掉setOpaque(false);也就是你直接复制运行我的这段代码,你会发现一个button被蓝色的panel所包围;然后,你再去掉setOpaque(false)的注释,再运行代码,你会发现蓝色区域变成了灰色,也就是你设置透明成功了!;第三步,你把paint方法的注释去掉,这时候你再去运行代码,你会发现只能看到图片,看不到之前的button了,我想是因为你绘图之后覆盖了之前的那个图层。所以说并不是你设置透明不成功,而是被覆盖了。不知道我能不能回答楼主的问题?呵呵...
import java.applet.*;  
import java.awt.*;
import java.net.*;
import javax.swing.*;

class MyPanel extends JPanel{
public MyPanel(){
setPreferredSize(new Dimension(100, 100));
setBackground(Color.BLUE);
//setOpaque(false);
}
}

public class DrawImage extends Applet{
private Image image;
private JPanel panel;

public void init(){
panel = new JPanel(new BorderLayout());
panel.add(new JButton("Test"), BorderLayout.CENTER);
panel.add(new MyPanel(), BorderLayout.NORTH);
panel.add(new MyPanel(), BorderLayout.SOUTH);
panel.add(new MyPanel(), BorderLayout.WEST);
panel.add(new MyPanel(), BorderLayout.EAST);

try{
image = getImage(new URL("http://avatar.profile.csdn.net/5/2/8/2_ufofind.jpg"));

}catch (Exception e){
e.printStackTrace();
}

add(panel);
setSize(500, 250);
setVisible(true);
}

//public void paint(Graphics g){
//g.drawImage(image, 0, 0, this);
//}
}

djt_1982 2009-09-11
  • 打赏
  • 举报
回复
对不起,不小心copy错了。
是getCenterPanel().setOpaque(false)
djt_1982 2009-09-11
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090909/15/0f4af2a2-ded8-454a-b1f4-2f1c6390b0b7.html?65672
ly870613 2009-09-11
  • 打赏
  • 举报
回复
有个包好像就jxlaryer可以哦,具体的我也忘记了
wd9053 2009-09-11
  • 打赏
  • 举报
回复
还是不行啊
  • 打赏
  • 举报
回复
JDK用1.6的
YBBPS1109 2009-09-11
  • 打赏
  • 举报
回复
试试JFrame.setGlassPane();
goodmrning 2009-09-11
  • 打赏
  • 举报
回复
你试把背景图片加到layerpanel里面去,然后把layerpanel加到contentpanel,再设置contentpanel为透明。
goodmrning 2009-09-11
  • 打赏
  • 举报
回复
我也遇到过这样的问题啊!

可惜没解决。
wd9053 2009-09-11
  • 打赏
  • 举报
回复
JDK6支持透明吗?如果能的话,该如何做
healer_kx 2009-09-11
  • 打赏
  • 举报
回复
我只知道最新的JDK的Swing才支持透明,JDK5和JDK4就别想了。如果想做透明效果用swt,或者是C#。

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧