下面是我的代码,一旦加载了panel2,一开始加载的图片就不能显示了,看论坛上大家都用
setOpaque(false);
但我发现根本不起作用,请高手帮忙看看。多谢!
 
import javax.swing.*;import java.awt.*;public class BackGround extends JFrame{ Container content; Toolkit toolkit; JLabel bkLabel = new JLabel();// 背景图片标签 JLabel horseLabel = new JLabel(); JButton bButton; int screenWidth, screenHeight, WIDTH, HEIGHT; ImageIcon backImage, bImage; BackGround(){
content = getContentPane(); toolkit = Toolkit.getDefaultToolkit(); screenWidth = toolkit.getScreenSize().width; screenHeight = toolkit.getScreenSize().height;
bImage = new ImageIcon("pic/logo.jpg");

backImage = new ImageIcon("pic/background.gif");
bkLabel.setIcon(backImage);
bkLabel.setOpaque(true); WIDTH = backImage.getIconWidth(); HEIGHT = backImage.getIconHeight(); content.add(bkLabel,-1);// 添加背景图片 bButton = new JButton(bImage); JPanel panel2 = new JPanel(); panel2.setOpaque(false);// 设置panel2背景透明 panel2.setPreferredSize(new Dimension(40, 40));
panel2.add(bButton);
content.add(panel2);
validate(); setBounds(300,200,WIDTH,HEIGHT); setLocation((screenWidth - WIDTH) / 2, (screenHeight - HEIGHT) / 2); setSize(WIDTH, HEIGHT); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { new BackGround(); }}

解决方案 »

  1.   

    你的意图其实就是在一个有背景的面板上加一个按钮,可以在JPanel上绘制该背景图片,然后在该面板上添加按钮。
      

  2.   

    实例代码如下:
    class ImagePane extends JPanel
    { Image bj;
      Toolkit tool;
      tool=getToolkit();
       bj=tool.getImage("chgbj.gif");
       public void paintComponent(Graphics g)
    {super.paintComponent(g);
    g.drawImage(bj,0,0,this);
      

  3.   

    是一个jpanel有背景,在这个jpanel上又有一个带button的jpanel,我即想显示button,又想显示背景。jpanel是叠加的,上层的覆盖下层的,我的目的就是让上层的jpanel都变透明,但上层的jpanel上加载的控件(button,label等等)还能显示出来,最下层是背景,这样就能出现控件显示在背景上的效果了
      

  4.   

    import javax.swing.*;import java.awt.*;public class BackGround extends JFrame {
        Container content;
        Toolkit toolkit;
        JLabel bkLabel = new JLabel(); // 背景图片标签
        JLabel horseLabel = new JLabel();
        JButton bButton;
        int screenWidth, screenHeight, WIDTH, HEIGHT;
        ImageIcon backImage, bImage;
        BackGround() {
            content = getContentPane();
            toolkit = Toolkit.getDefaultToolkit();
            screenWidth = toolkit.getScreenSize().width;
            screenHeight = toolkit.getScreenSize().height;
            bImage = new ImageIcon("pic/logo.jpg");
            //我的笨方法
                   JLabel image_lab = new JLabel(new ImageIcon("D:\\pic\\logo.jpg"));
                  //编译的时候会帮你把文件拷贝到classes目录下面去
        //同时要达到LZ的效果很简单,两个Panel。直接覆盖的话,如果覆盖面板小于底层面板,当鼠标移动到底层面板区域。则显示了,所以建议加上         //setEnabled(false);这样做LZ你不觉得复杂了吗?你直接在我的image_lab 上加载组件不行吗?或者你先都把组件隐藏了,等用户触发事件再显//示也可以啊。
             //
            backImage = new ImageIcon("pic/background.gif");
            bkLabel.setIcon(backImage);
            bkLabel.setOpaque(true);
            WIDTH = backImage.getIconWidth();
            HEIGHT = backImage.getIconHeight();
            content.add(bkLabel, -1); // 添加背景图片
            bButton = new JButton(bImage);
            JPanel panel2 = new JPanel();
            panel2.setOpaque(false); // 设置panel2背景透明
            panel2.setPreferredSize(new Dimension(40, 40));
            panel2.add(bButton);
            content.add(panel2);
            validate();
            setBounds(300, 200, WIDTH, HEIGHT);
            setLocation((screenWidth - WIDTH) / 2, (screenHeight - HEIGHT) / 2);
            setSize(WIDTH, HEIGHT);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
        }    public static void main(String[] args)
        {
            new BackGround();
        }
    }
      

  5.   

    建议采用Sun开发的拖拽工具,具体叫啥我忘记了,里边有该功能,代码都是自动生成的,像你这样开发,何年何月才能完成啊