A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 薆情媬証書 于 2013-11-2 14:13 编辑

有没有什么方法可以给Frame加上背景图片?单一的背景颜色太难看!!

2 个回复

正序浏览
        我们在进行图形用户界面编程时,为了做出一个漂亮、个性化的界面,那么界面的背景就必须考虑了。要想灵活使用背景,就一定要对frame的基本有一些了解,因为在java编程中没有直接设置背景的有关方法,了解一些基本知识后我们就可以随意设置背景了。
        首先还是要了解框架JFrame中的层次结构。JFrame中的层次分布及相对关系是:最底层是:JRootPane;第二层是:JlayerPane;最上层就是ContentPane,也正是我们常说的内容面板。所以一般我们拖放的控件就是在ContentPane层上。
        有了这些常识后我们就可以随意设计背景了。在这里笔者提供两种方法为一个frame设置一张背景图片。
方法一:
        原理:我们把图片放置在第二层:JlayerPane容器上,然后让最上层的:ContentPane透明,这样就实现了背景的设置。(当然把图片放置最低层,让上面两层透明也是可以的)
具体步骤:
// 加载背景图片
ImageIcon bg = new ImageIcon("background.jpg");
// 把背景图片显示在一个标签里
JLabel label = new JLabel(bg);
//把标签的大小位置设置为图片刚好填充整个面label.setBounds(0,0,bg.getIconWidth(),bg.getIconHeight());
//添加图片到frame的第二层
frame.getLayeredPane().add(label,newInteger(Integer.MIN_VALUE));
//获取frame的最上层面板为了设置其背景颜色(JPanel有设置透明的方法)
JPanel jp=(JPanel)frame.getContentPane();
jp.setOpaque(false);//设置透明
                //测试用的JPanel
                JPanel panel=new JPanel();       
                panel.setOpaque(false);//也要让他透明
                panel.setLayout(null);//为了使用按钮的定位
                JButton button=new JButton("OK");
                button.setSize(100, 20);
                button.setLocation(100, 50);
                panel.add(button);
                frame.add(panel);

方法二:
        原理:我们直接在最上层容器内重写paintComponent(Graphics g)方法在容器中画一张图片。(这种方法很直观,原理很简单)
具体步骤:
        只需要在构造JPanel时重写paintComponent(Graphics g)就ok了。
class PanelTest extends JPanel{
        ImageIcon background = new ImageIcon("background.jpg");//加载图片
        Image im=Toolkit.getDefaultToolkit().getImage("background.jpg");
        int h,w;
        public void paintComponent(Graphics g) {
                g.drawImage(im, 0, 0, null);
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
To 金牌黑马 2013-11-1 22:53:31
沙发
自己尝试先解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马