在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();
}
}

解决方案 »

  1.   

    我只知道最新的JDK的Swing才支持透明,JDK5和JDK4就别想了。如果想做透明效果用swt,或者是C#。
      

  2.   

    JDK6支持透明吗?如果能的话,该如何做
      

  3.   

    你试把背景图片加到layerpanel里面去,然后把layerpanel加到contentpanel,再设置contentpanel为透明。
      

  4.   

    有个包好像就jxlaryer可以哦,具体的我也忘记了
      

  5.   

    http://topic.csdn.net/u/20090909/15/0f4af2a2-ded8-454a-b1f4-2f1c6390b0b7.html?65672 
      

  6.   

    对不起,不小心copy错了。
    是getCenterPanel().setOpaque(false)
      

  7.   

    请看我在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); 
        //}
    }
      

  8.   

    重写repaint()方法,在repaint方法中让组件重绘即可