import javax.swing.*;import java.awt.*;public class test extends JFrame{
 
public test()
{

JLabel jl=new JLabel(new ImageIcon("Image/a.jpg"));
jl.setBounds(0, 0, 300, 300);
JButton jb=new JButton("jbutton");
JTextField jt=new JTextField(8);

((JPanel)this.getContentPane()).setOpaque(false);

JPanel jp=new JPanel();
jp.setOpaque(false);
jp.add(jb);
jp.add(jt);
this.getLayeredPane().add(jl,new Integer(Integer.MIN_VALUE));
this.add(jp);

this.setSize(300,300);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation(300,200);

}

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
new test();
}}这段代码  可以实现在背景上添加组件  
  但是  对于这句 ((JPanel)this.getContentPane()).setOpaque(false);  我不太理解
 这句是用来干嘛的  是设置 JPanel的透明吗     我在后面定义JPanel 的时候
JPanel jp=new JPanel(); jp.setOpaque(false); 也设置了 透明   这两者有联系吗 
 我删掉任意一条  程序都不能实现原先的功能   请帮忙解释一下

解决方案 »

  1.   

    this.add(jp);这里add是this.getContentPane().add();
    你自己想一下,两个JPanel叠在一起,任何一个不设置透明度,是不是和没效果一样?两个都是透明了才有效果,要么是顶层的挡住了,要么是下层的挡住.
    给你两块玻璃,叠一起的话.....必须两块都透明吧?
      

  2.   

    你可以试试这样的...
    JLabel jl=new JLabel(new ImageIcon("c:\\a.jpg"));
    jl.setBounds(0, 0, 300, 300);
    JButton jb=new JButton("jbutton");
    JTextField jt=new JTextField(8); //((JPanel)this.getContentPane()).setOpaque(false); JPanel jp=new JPanel();
    jp.setOpaque(false);
    this.setContentPane(jp);
    jp.add(jb);
    jp.add(jt);
    this.getLayeredPane().add(jl,new Integer(Integer.MIN_VALUE));
    //this.add(jp); this.setSize(300,300);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLocation(300,200);