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

简介: 【Java数字图像处理之Swing基础篇】自定义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);

 

  • 线性渐变颜色填充,包括水平和垂直方向的线性渐变
        //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);

        //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);

  • 圆周径向渐变颜色填充
        //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);

  • 自定义背景
//使用本地图片-下面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);

关于drawImage方法中的ImageOberserver参数

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

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



相关文章
|
14天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
|
14天前
|
Java
在 Java 中,如何自定义`NumberFormatException`异常
在Java中,自定义`NumberFormatException`异常可以通过继承`IllegalArgumentException`类并重写其构造方法来实现。自定义异常类可以添加额外的错误信息或行为,以便更精确地处理特定的数字格式转换错误。
|
2月前
|
Java
让星星⭐月亮告诉你,自定义定时器和Java自带原生定时器
定时器是一种可以设置多个具有不同执行时间和间隔的任务的工具。本文介绍了定时器的基本概念、如何自定义实现一个定时器,以及Java原生定时器的使用方法,包括定义定时任务接口、实现任务、定义任务处理线程和使用Java的`Timer`与`TimerTask`类来管理和执行定时任务。
49 3
|
1月前
|
Java 开发者 Spring
[Java]自定义注解
本文介绍了Java中的四个元注解(@Target、@Retention、@Documented、@Inherited)及其使用方法,并详细讲解了自定义注解的定义和使用细节。文章还提到了Spring框架中的@AliasFor注解,通过示例帮助读者更好地理解和应用这些注解。文中强调了注解的生命周期、继承性和文档化特性,适合初学者和进阶开发者参考。
49 14
|
2月前
|
安全 Java
如何在 Java 中创建自定义安全管理器
在Java中创建自定义安全管理器需要继承SecurityManager类并重写其方法,以实现特定的安全策略。通过设置系统安全属性来启用自定义安全管理器,从而控制应用程序的访问权限和安全行为。
|
2月前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
58 2
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
|
2月前
|
消息中间件 存储 Java
大数据-58 Kafka 高级特性 消息发送02-自定义序列化器、自定义分区器 Java代码实现
大数据-58 Kafka 高级特性 消息发送02-自定义序列化器、自定义分区器 Java代码实现
46 3
|
3月前
|
IDE Java 开发工具
java自定义异常20
java自定义异常20
29 3
|
3月前
|
Java 编译器 程序员
Java注解,元注解,自定义注解的使用
本文讲解了Java中注解的概念和作用,包括基本注解的用法(@Override, @Deprecated, @SuppressWarnings, @SafeVarargs, @FunctionalInterface),Java提供的元注解(@Retention, @Target, @Documented, @Inherited),以及如何自定义注解并通过反射获取注解信息。
Java注解,元注解,自定义注解的使用
|
2月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
24 0
下一篇
无影云桌面