SWING 透明按钮问题

tk282687444 2011-02-27 02:56:01

如何能让这个按钮的周围变成透明的,其余部分能看到后面图片
哪位大侠指导,最终实现以下效果
...全文
512 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wgg172 2012-03-09
  • 打赏
  • 举报
回复
恭喜你能成功!能否告诉一下是怎么用OPENGL重绘的?怎么将lable背景去掉的?
wgg172 2012-03-09
  • 打赏
  • 举报
回复
你说用OPENGL重绘解决了在wwd上显示透明图片问题,能否告知一下具体的方法?我也对这个很感兴趣。
tk282687444 2011-02-28
  • 打赏
  • 举报
回复

问题解决了,而且效果非常好,用的是OPENGL重绘,依然感谢
tk282687444 2011-02-27
  • 打赏
  • 举报
回复

只能显示我之前设置的背景色,完全显示不了地球,难道这个地球有猫腻?
代码如下
JLabel lable=new JLabel();
lable.setIcon(new ImageIcon(ImageUtil.loadImage("logo.png")));
lable.setOpaque(false);
this.getContentPane().add(lable);
this.getContentPane().add(wwd);
tk282687444 2011-02-27
  • 打赏
  • 举报
回复
...确实是默认的,应该用什么的?我知道有个重叠布局,但不知道怎么用
sunyiz 2011-02-27
  • 打赏
  • 举报
回复
你的content用的是什么布局?
你这样add
如果是默认布局的话
后一组件会挡住前一组件
就是说wwd会挡住你之前添加的那个组件
tk282687444 2011-02-27
  • 打赏
  • 举报
回复
图片已经确认是透明的,JLable还真就试过了,直接不显示在WWD画布之上,我怀疑是那个WorldWindowGLCanvas的问题,去掉它就透明了
sunyiz 2011-02-27
  • 打赏
  • 举报
回复
早就说了 用JLabel来代替
用setIcon方法
如果JLabel都不行
那只能说明一个问题
那就是图片本身不透明
tanrenye 2011-02-27
  • 打赏
  • 举报
回复
这种图片用PS抠出来保存为PNG格式就可以变透明了,普通JPG格式是无法透明的。
tk282687444 2011-02-27
  • 打赏
  • 举报
回复
还是不行,就是不透明,是不是因为我后面的地球是随时变化的原因?
sunyiz 2011-02-27
  • 打赏
  • 举报
回复
汗…… 一个JButton设置图片而已
何必重写paintComponent方法
如果想这样,在重写paintComponent方法时
第一行加上super.paintComponent(g);

其实JButton设置图片
setIcon方法就搞定啦
tk282687444 2011-02-27
  • 打赏
  • 举报
回复

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的类就可以,加上就不成
sunyiz 2011-02-27
  • 打赏
  • 举报
回复
如果楼主说的是那个地球的话
那最大的问题是你的图片本身好像就不是透明的
你先把这个图片放到JLabel上,看下背景是否透明

其实这种透明按钮,我一般都是建议用JLabel代替JButton
如果一定要用JButton那可以用setContentAreaFilled(false)
不要用setOpaque
tk282687444 2011-02-27
  • 打赏
  • 举报
回复
不行,对普通的可以,但是我的后面是一个WorldWindowGLCanvas类,是一个Worldwind GIS 画布类,结果就不可以了
peenyking 2011-02-27
  • 打赏
  • 举报
回复
setOpaque( false );

62,614

社区成员

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

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