【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。



相关文章
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
574 1
|
9月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
410 4
|
11月前
|
Java 数据库 C++
Java异常处理机制:try-catch、throws与自定义异常
本文深入解析Java异常处理机制,涵盖异常分类、try-catch-finally使用、throw与throws区别、自定义异常及最佳实践,助你写出更健壮、清晰的代码,提升Java编程能力。
|
Java
在 Java 中,如何自定义`NumberFormatException`异常
在Java中,自定义`NumberFormatException`异常可以通过继承`IllegalArgumentException`类并重写其构造方法来实现。自定义异常类可以添加额外的错误信息或行为,以便更精确地处理特定的数字格式转换错误。
362 1
|
Java
让星星⭐月亮告诉你,自定义定时器和Java自带原生定时器
定时器是一种可以设置多个具有不同执行时间和间隔的任务的工具。本文介绍了定时器的基本概念、如何自定义实现一个定时器,以及Java原生定时器的使用方法,包括定义定时任务接口、实现任务、定义任务处理线程和使用Java的`Timer`与`TimerTask`类来管理和执行定时任务。
609 3
|
XML 人工智能 Java
java通过自定义TraceId实现简单的链路追踪
本文介绍了如何在Spring Boot项目中通过SLF4J的MDC实现日志上下文traceId追踪。内容涵盖依赖配置、拦截器实现、网关与服务间调用的traceId传递、多线程环境下的上下文同步,以及logback日志格式配置。适用于小型微服务架构的链路追踪,便于排查复杂调用场景中的问题。
571 0
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
560 34
|
存储 IDE Java
漂亮不是梦!Java Swing美化攻略
Java Swing 是一个为 Java 设计的 GUI 工具包,提供文本框、按钮等组件。尽管其外观可定制,通过 Look and Feel(LAF)机制改变应用风格,如 Darcula 和 FlatLaf,但现已淡出主流视野,主要应用于 IDE 领域,如 IntelliJ IDEA 和 Eclipse。相比其他 GUI 框架,Swing 的发展前景有限。
902 1
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
420 2
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
|
安全 Java
如何在 Java 中创建自定义安全管理器
在Java中创建自定义安全管理器需要继承SecurityManager类并重写其方法,以实现特定的安全策略。通过设置系统安全属性来启用自定义安全管理器,从而控制应用程序的访问权限和安全行为。
493 1