怎样在JFrame中设置背景图片

而且背景图片能随窗口大小的改变而自动改变小弟初学java,希望高手能指点哈,最好给个能看懂的例子!!... 而且背景图片能随窗口大小的改变而自动改变
小弟初学java,希望高手能指点哈,最好给个能看懂的例子!!
展开
 我来答
hardneedl
推荐于2017-11-22 · TA获得超过921个赞
知道小有建树答主
回答量:1353
采纳率:57%
帮助的人:606万
展开全部

import javax.swing.*;

import java.awt.*;

/**

 * @author Hardneedl

 */

final class PictureBackgroundFrame extends JFrame {

    public String getTitle() {return "frame title";}

    static private final Dimension size = new Dimension(600, 400);

    public Dimension getPreferredSize() {return size;}

    public Dimension getMaximumSize() {return size;}

    public Dimension getMinimumSize() {return size;}

    public Dimension getSize() {return size;}

    private static final Image image = Toolkit.getDefaultToolkit().getImage("b.JPG");

    private static final JComponent canvas = new JComponent(){

        protected void paintComponent(Graphics g) {

            super.paintComponent(g);

            Graphics gg = g.create();

            gg.drawImage(image,0,0,getWidth(),getHeight(),this);

            gg.dispose();

        }

    };

    PictureBackgroundFrame() throws HeadlessException {

        attachListeners();

        doLay();

    }

    private void attachListeners() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    private void doLay() {

        Container container = getContentPane();

        container.add(canvas);

        pack();

        setVisible(true);

    }

    public static void main(String[] args) {new PictureBackgroundFrame();}

}

广州速推信息科技有限公司
2017-02-20 · 诚信经营,以人为本,客户致上!
广州速推信息科技有限公司
文芳阁传媒是一个专业在网络上承接企业,个人软文代写以及软文推广的平台。以低价格把新闻发布在新浪、网易、新华、凤凰、腾讯、央视等3000家门户及地方网站媒体,以塑造公司品牌的知名度和公信力.
向TA提问
展开全部
import java.awt.*;import javax.swing.*;import java.awt.Container;public class framebg {public framebg() {}public static void main (String[] args) {JFrame frame=new JFrame("背景图设置");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);ImageIcon img = new ImageIcon("bg\\1.gif");//这是背景图片JLabel imgLabel = new JLabel(img);//将背景图放在标签里。frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));//注意这里是关键,将背景标签添加到jfram的LayeredPane面板里。imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());//设置背景标签的位置Container cp=frame.getContentPane();cp.setLayout(new BorderLayout());JButton but=new JButton("anniu");//创建按钮cp.add(but,"North");//将按钮添加入窗口的内容面板
((JPanel)cp).setOpaque(false); //注意这里,将内容面板设为透明。这样LayeredPane面板中的背景才能显示出来。frame.setSize(500,300);frame.setVisible(true);}}import java.awt.*;import javax.swing.*;import java.awt.Container;
public class framebg {
public framebg() {}public static void main (String[] args) {JFrame frame=new JFrame("背景图设置");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);ImageIcon img = new ImageIcon("bg\\1.gif");//这是背景图片JLabel imgLabel = new JLabel(img);//将背景图放在标签里。
frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));//注意这里是关键,将背景标签添加到jfram的LayeredPane面板里。imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());//设置背景标签的位置Container cp=frame.getContentPane();cp.setLayout(new BorderLayout());JButton but=new JButton("anniu");//创建按钮cp.add(but,"North");//将按钮添加入窗口的内容面板
((JPanel)cp).setOpaque(false); //注意这里,将内容面板设为透明。这样LayeredPane面板中的背景才能显示出来。
frame.setSize(500,300);frame.setVisible(true);}}
3
通过为jframe设置背景图片,让我明白了以下的知识要点:(1)jframe窗口的组成部分,最底层是jrootpane面板。(这一点恐怕很多初学者都没有注意吧!)(2)jframe的组成如下:jrootpane中包含glasspane和layeredpane两个面板。而layeredpane面板包含contentpane和jmenubar。(没想到吧contentpane是放在contentpane中的?)(3)在jframe上添加组件,往往是添加在contentpane中。。但是在contentpane的下面还有两层面板,那就是layeredpane和jrootpane。(4)任何一本关于java的书中都会介绍contentpane,却很少提到layeredpane和jrootpane,因此使得很多的初学者产生:jframe中只要一个contentpane的错误认识。
通过解决背景设置的问题,让我对jframe中容器的“层”结构,有个更深层的了解。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
曹晓山11
推荐于2016-07-28 · 知道合伙人互联网行家
曹晓山11
知道合伙人互联网行家
采纳数:3033 获赞数:52066
毕业南阳理工学院计算机科学与技术专业,本科学位。互联网行业从业3年工作经验,读过编程类相关书籍多本。

向TA提问 私信TA
展开全部

把需要设置为JFrame中的背景图片(以zhidao.gif为例)放到与源文件相同的路径下,然后代码如下:

import java.awt.*;
import javax.swing.*;
class MyPanel extends JPanel
{
    ImageIcon img;
    JButton btnTest1,btnTest2;
    MyPanel()
    {
        img=new ImageIcon("zhidao.gif");
        btnTest1=new JButton("btnTest1");
        btnTest2=new JButton("btnTest2");
        this.setLayout(new FlowLayout());
        add(btnTest1);
        add(btnTest2);
    }
    public void paint(Graphics g)
    {
        g.drawImage(img.getImage(),0,0,this.getWidth(),this.getHeight(),this);
    }
}
class mainApp
{
    public static void main(String[] args)
    {
        JFrame fm=new JFrame("BackGround Image Test");
        MyPanel panel=new MyPanel();
        fm.getContentPane().add(panel);
        fm.show();
    }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式