解决方案 »
- 谁有jdom的中文帮助文档啊,给我一份,实在没有英文也行
- 有一道 java 题目 不知道哪里错了 运行不能通过 希望高手指点
- 去掉JMenuItem左侧的空白
- 如何处理Hibernate联表查询的结果
- 下列异常是什么原因造成的呢?同样的程序,为什么在TOMCAT下可以通过运行,而在websphere下却出现了下列错误
- 用java怎么将图片存进Access里啊?
- timer的问题
- jbuilder8 Enterprise weblogic edition 如何注册!
- 已经是"iso-8859-1"类型了,为什么中文的名字就是删除不掉!
- 高手帮忙看看CoreJava的一段程序
- 麻烦分析下这个简单的java程序
- 怎么用java实现窗口切换
那最大的问题是你的图片本身好像就不是透明的
你先把这个图片放到JLabel上,看下背景是否透明其实这种透明按钮,我一般都是建议用JLabel代替JButton
如果一定要用JButton那可以用setContentAreaFilled(false)
不要用setOpaque
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的类就可以,加上就不成
何必重写paintComponent方法
如果想这样,在重写paintComponent方法时
第一行加上super.paintComponent(g);其实JButton设置图片
setIcon方法就搞定啦
用setIcon方法
如果JLabel都不行
那只能说明一个问题
那就是图片本身不透明
你这样add
如果是默认布局的话
后一组件会挡住前一组件
就是说wwd会挡住你之前添加的那个组件
只能显示我之前设置的背景色,完全显示不了地球,难道这个地球有猫腻?
代码如下JLabel lable=new JLabel();
lable.setIcon(new ImageIcon(ImageUtil.loadImage("logo.png")));
lable.setOpaque(false);
this.getContentPane().add(lable);
this.getContentPane().add(wwd);
问题解决了,而且效果非常好,用的是OPENGL重绘,依然感谢