急,jpanel透明的问题

bread213 2009-02-28 02:33:13
下面是我的代码,一旦加载了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();

}

}
...全文
1007 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yummy1900 2011-08-22
  • 打赏
  • 举报
回复
没咋看懂啊。。。。
jack441900 2010-12-02
  • 打赏
  • 举报
回复
咋那几个回复看不见,一定要回复吗?
林g 2009-03-10
  • 打赏
  • 举报
回复
学习!
pang040328 2009-03-09
  • 打赏
  • 举报
回复
建议采用Sun开发的拖拽工具,具体叫啥我忘记了,里边有该功能,代码都是自动生成的,像你这样开发,何年何月才能完成啊
bread213 2009-03-06
  • 打赏
  • 举报
回复
多谢各位,我试试
createWang 2009-03-01
  • 打赏
  • 举报
回复


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();
}
}

dawn023 2009-02-28
  • 打赏
  • 举报
回复
那你还是用我的方法吧,创建一个有背景图片的面板,在其上直接添加你想要的组件,不要用什么叠加覆盖之类的。也不要什么透明。
bread213 2009-02-28
  • 打赏
  • 举报
回复
是一个jpanel有背景,在这个jpanel上又有一个带button的jpanel,我即想显示button,又想显示背景。jpanel是叠加的,上层的覆盖下层的,我的目的就是让上层的jpanel都变透明,但上层的jpanel上加载的控件(button,label等等)还能显示出来,最下层是背景,这样就能出现控件显示在背景上的效果了
dawn023 2009-02-28
  • 打赏
  • 举报
回复
实例代码如下:
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);
}
dawn023 2009-02-28
  • 打赏
  • 举报
回复
你的意图其实就是在一个有背景的面板上加一个按钮,可以在JPanel上绘制该背景图片,然后在该面板上添加按钮。
dawn023 2009-02-28
  • 打赏
  • 举报
回复
这代码也够乱的。

62,614

社区成员

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

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