【Java数字图像处理之Swing基础篇】自定义JPanel背景

简介: Swing的JPanel是GUI编程中最重要的一个组件,我们可以通过重写JPanel的paintComponent 方法实现对JPanel的背景颜色、背景图片的的调整及设置。

Swing的JPanel是GUI编程中最重要的一个组件,我们可以通过重写JPanel的paintComponent 方法实现对JPanel的背景颜色、背景图片的的调整及设置。


只需要完成下面几个步骤:



1. 类继承JPanel

public class MyJPanel extends JPanel {
}

2. 完成对paintComponent 方法的重写

@Override
    protected void paintComponent(Graphics g) {
}

3. 访问Graphics绘制引擎

设置画笔并完成绘制,我们将使用Java2D中的图形绘制引擎(画笔),因为它具有功能更加丰富的图形库,Java 2D支持3种不同的画笔填充策略:


单一颜色填充

//1.单一颜色背景填充
        Graphics2D g2 = (Graphics2D) g;
        g2.setPaint(Color.BLUE);
        Area area = new Area(new Rectangle2D.Double(0,0,400,300));
        g2.fill(area);

 image.png


线性渐变颜色填充,包括水平和垂直方向的线性渐变

//2.线性渐变颜色填充
        //2.1 水平方向渐变颜色填充
        Color secondColor = new Color(99,153,255);
        GradientPaint hLinePaint = new GradientPaint(0,0,Color.BLACK,this.getWidth(),0,secondColor);
        g2.setPaint(hLinePaint);
        Area area = new Area(new Rectangle2D.Double(0,0,400,300));
        g2.fill(area);

image.png


       //2.2 垂直方向渐变颜色填充

Color controlColor = new Color(99,153,255);
        GradientPaint vLinePaint = new GradientPaint(0,0,Color.BLACK,this.getHeight(),0,secondColor);
        g2.setPaint(vLinePaint);
        Area area = new Area(new Rectangle2D.Double(0,0,400,300));
        g2.fill(area)

;

image.png

圆周径向渐变颜色填充

//3.圆周径向渐变颜色填充
        float cx = this.getWidth();
        float cy = this.getHeight();
        float radius = Math.min(cx,cy);
        float[] fractions = new float[]{0.1f,0.5f,1.0f};
        Color[] colors = new Color[]{Color.RED,Color.GREEN,Color.BLUE};
        RadialGradientPaint rgp = new RadialGradientPaint(cx,cy,radius,fractions,colors, MultipleGradientPaint.CycleMethod.NO_CYCLE);
        g2.setPaint(rgp);
        Area area = new Area(new Rectangle2D.Double(0,0,400,300));
        g2.fill(area);

image.png


自定义背景

//使用本地图片-下面drawImage的最后一个参数可使用 null
ImageIcon icon = null;
//icon = new ImageIcon("D:\\bg.jpg");
//使用网络图片
try {
            //使用网络图片时,通常不需要设置ImagObserver参数,因为ImageIcon已经默认处理了网络图片的加载
            icon = new ImageIcon(new URL("https://img-home.csdnimg.cn/images/20230329030133.jpg"));
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        Image image = icon.getImage();
        super.paintComponent(g2);
        //this 会等待图片加载完成并通知ImageObserver对象,在图像完全加载后绘制
        //null 不等待图像加载完毕,直接绘制到界面上。加载快但是可能会出现加载不完全的情况
        g2.drawImage(image,0,0,this.getWidth(),this.getHeight(),this);

image.png


关于drawImage方法中的ImageOberserver参数

       ImageObserver参数是一个回调,用于通知您绘制操作的进度;并且仅在异步获取Image参数时才有用。


       基本上,如果您使用的是内存Image(从文件系统加载或由程序构造),则不必担心ImageObserver参数(设置为null也可以)。如果要通过网络加载Image,而不显式等待它们加载,则需要使用ImageObserver以确保"完全"绘制Image。


相关文章
|
22天前
|
存储 Java 关系型数据库
个人成绩信息管理系统【GUI/Swing+MySQL】(Java课设)
个人成绩信息管理系统【GUI/Swing+MySQL】(Java课设)
20 0
|
22天前
|
存储 Java 关系型数据库
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
24 1
|
22天前
|
存储 Java 关系型数据库
实验室设备管理系统【GUI/Swing+MySQL】(Java课设)
实验室设备管理系统【GUI/Swing+MySQL】(Java课设)
17 0
|
22天前
|
存储 Java 关系型数据库
冬奥会传统文化管理系统【GUI/Swing+MySQL】(Java课设)
冬奥会传统文化管理系统【GUI/Swing+MySQL】(Java课设)
8 0
|
22天前
|
存储 Java 关系型数据库
学生宿舍管理系统【GUI/Swing+MySQL】(Java课设)
学生宿舍管理系统【GUI/Swing+MySQL】(Java课设)
18 0
|
22天前
|
存储 Java 关系型数据库
学生管理系统【GUI/Swing+MySQL】(Java课设)
学生管理系统【GUI/Swing+MySQL】(Java课设)
17 0
|
22天前
|
存储 Java 关系型数据库
洗浴中心管理系统【GUI/Swing+MySQL】(Java课设)
洗浴中心管理系统【GUI/Swing+MySQL】(Java课设)
13 0
|
3月前
|
NoSQL Java 关系型数据库
基于Java swing和mysql实现的学生选课管理系统(源码+数据库+运行指导视频)
基于Java swing和mysql实现的学生选课管理系统(源码+数据库+运行指导视频)
|
3月前
|
Java 关系型数据库 MySQL
基于java swing和mysql实现的仓库商品管理系统(源码+数据库+运行指导视频)
基于java swing和mysql实现的仓库商品管理系统(源码+数据库+运行指导视频)
|
3月前
|
NoSQL Java 关系型数据库
基于java swing和mysql实现的汽车租赁管理系统(源码+数据库+文档+运行指导视频)
基于java swing和mysql实现的汽车租赁管理系统(源码+数据库+文档+运行指导视频)