本帖最后由 tk282687444 于 2011-02-27 15:04:34 编辑

解决方案 »

  1.   

    不行,对普通的可以,但是我的后面是一个WorldWindowGLCanvas类,是一个Worldwind GIS 画布类,结果就不可以了
      

  2.   

    如果楼主说的是那个地球的话
    那最大的问题是你的图片本身好像就不是透明的
    你先把这个图片放到JLabel上,看下背景是否透明其实这种透明按钮,我一般都是建议用JLabel代替JButton
    如果一定要用JButton那可以用setContentAreaFilled(false)
    不要用setOpaque
      

  3.   


    public class MyImageButton extends JButton {
        Image image =ImageUtil.loadImage("logo.png");    public MyImageButton(String text) {
            super(text);
            setOpaque(false);
            setFocusable(true);
            setBorderPainted(false);        this.setPreferredSize(new Dimension(image.getWidth(this), image
                    .getHeight(this)));
        }    @Override
        protected void paintComponent(Graphics g) {
            g.drawImage(image,
                    0,
                    0,
                    null);
        }
    }
    this.wwd = new WorldWindowGLCanvas();
    JButton button = new MyImageButton("按钮");
    button.setSize(new Dimension(32,32));
    button.setMargin(new Insets(1, 1, 0, 0));
    button.setBorderPainted(false);
    button.setContentAreaFilled(false);
    button.setAlignmentX(0);
    button.setAlignmentY(0);
    //button.setOpaque(false);
    this.getContentPane().add(button,0);
    //this.getContentPane().add
    this.getContentPane().add(wwd,1);代码是这样的,外面是一个JFrame一样不行,图片是透明的,去掉WWd的类就可以,加上就不成
      

  4.   

    汗…… 一个JButton设置图片而已
    何必重写paintComponent方法
    如果想这样,在重写paintComponent方法时
    第一行加上super.paintComponent(g);其实JButton设置图片
    setIcon方法就搞定啦
      

  5.   

    这种图片用PS抠出来保存为PNG格式就可以变透明了,普通JPG格式是无法透明的。
      

  6.   

    早就说了 用JLabel来代替
    用setIcon方法
    如果JLabel都不行
    那只能说明一个问题
    那就是图片本身不透明
      

  7.   

    图片已经确认是透明的,JLable还真就试过了,直接不显示在WWD画布之上,我怀疑是那个WorldWindowGLCanvas的问题,去掉它就透明了
      

  8.   

    你的content用的是什么布局?
    你这样add
    如果是默认布局的话
    后一组件会挡住前一组件
    就是说wwd会挡住你之前添加的那个组件
      

  9.   


    只能显示我之前设置的背景色,完全显示不了地球,难道这个地球有猫腻?
    代码如下JLabel lable=new JLabel();
    lable.setIcon(new ImageIcon(ImageUtil.loadImage("logo.png")));
    lable.setOpaque(false);
    this.getContentPane().add(lable);
    this.getContentPane().add(wwd);
      

  10.   


    问题解决了,而且效果非常好,用的是OPENGL重绘,依然感谢
      

  11.   

    恭喜你能成功!能否告诉一下是怎么用OPENGL重绘的?怎么将lable背景去掉的?
      

  12.   

    你说用OPENGL重绘解决了在wwd上显示透明图片问题,能否告知一下具体的方法?我也对这个很感兴趣。