统计
  • 建站日期:2019-12-01
  • 文章总数:2002 篇
  • 评论总数:2124 条
  • 分类总数:21 个
  • 最后更新:11月21日
文章 未分类

swing-窗体怎么设置背景图片

程序员阿鑫
首页 未分类 正文

swing-窗体添加背景图片的2种方法

在美化程序时,常常需要在窗体上添加背景图片。通过搜索和测试,发现了2种有效方式。下面分别介绍。
1.利用JLabel加载图片
利用JLabel自带的setIcon(Icon icon)加载icon,并设置JLabel对象的位置和大小使其完全覆盖窗体。这是一个很取巧的办法,代码非常简单,如下所示。

JLabel lbBg = new JLabel(imageIcon);
lbBg.setBounds(0, 0, frameSize.width, frameSize.height);
this.getContentPane().add(lbBg);

然而这种方法有几个要注意的点:
(1)不能使用布局管理器
此时你需要将布局管理器设置为null,然后精确控制所有控件的大小和位置。否则,JLabel无法完整覆盖窗体。
(2)应当先添加背景JLabel,再添加其它控件。否则其它控件将被JLabel所遮挡(为什么不是后添加的遮挡先添加的?)。
(3)由于控件及窗体的尺寸需要手动控制,因此无法对背景图片进行缩放。

2.重载JPanel的paintComponent(Graphics g)方法
通过重载该方法,在JPanel的绘制阶段将指定图片绘制上去即可。由于背景是绘制出来的,因此不会对布局有任何影响。
示例代码如下:

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, d.width, d.height, this);
MainFrame.instance().repaint();
}

下面是一个完整的demo。

package frame;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class ImageFrame extends JFrame {

    class ImagePanel extends JPanel {
        Dimension d;
        Image image;

        public ImagePanel(Dimension d, Image image) {
            super();
            this.d = d;
            this.image = image;
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, d.width, d.height, this);
            MainFrame.instance().repaint();
        }
    }

    Dimension frameSize = new Dimension(500, 300);
    ImageIcon imageIcon = new ImageIcon(this.getClass().getResource(
            "/images/bg.jpg"));

    public ImageFrame() {
        // 设置窗体属性
        setSize(frameSize);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setIconImage(imageIcon.getImage());
        setUndecorated(true);
    }

    public void addImageByJLable() {
        setLayout(null);

        // 设置背景
        JLabel lbBg = new JLabel(imageIcon);
        lbBg.setBounds(0, 0, frameSize.width, frameSize.height);
        this.getContentPane().add(lbBg);

        addComponents();

        setVisible(true);
    }

    public void addImageByRepaint() {
        ImagePanel imagePanel = new ImagePanel(frameSize, imageIcon.getImage());
        setContentPane(imagePanel);

        addComponents();
        setVisible(true);
    }

    private void addComponents() {
        JButton btn1 = new JButton("haha");
        btn1.setBounds(10, 20, 60, 30);
        this.getContentPane().add(btn1);

        JTextField jtf = new JTextField("22222222222");
        jtf.setBounds(200, 100, 80, 30);
        this.getContentPane().add(jtf);

    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ImageFrame imageFrame = new ImageFrame();
        // imageFrame.addImageByJLable();
        imageFrame.addImageByRepaint();
    }

}

运行效果如下:


swing-窗体怎么设置背景图片
-程序员阿鑫-带你一起秃头
-第1
张图片

图1可见,使用JLabel时,由于未图片尺寸与窗体尺寸不一致,导致图片只显示出一部分;且有一个控件被遮挡了。注意:通过精细设置尺寸和添加控件顺序,可以达到较为满意的效果的。


swing-窗体怎么设置背景图片
-程序员阿鑫-带你一起秃头
-第2
张图片

图2可见,不需要可以设置匹配尺寸和控件的添加顺序,即可得到比较满意的效果。

以上是《 swing-窗体怎么设置背景图片》文章的全部内容,感谢您的支持!

以上就是《 swing-窗体怎么设置背景图片》文章的全部内容了!

 

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

-- 展开阅读全文 --
这篇文章最后更新于2020-6-24,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
swing怎么调取数据库实现登录功能
« 上一篇
java 如何获取本机的ip地址
下一篇 »

发表评论