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


相关文章
|
7月前
|
Java
Java Swing 层次面板(JLayeredPanel) Demo
Java Swing 层次面板(JLayeredPanel) Demo
53 0
|
8月前
|
Java 图形学 计算机视觉
【Java数字图像处理之Swing基础篇】自定义JPanel背景
【Java数字图像处理之Swing基础篇】自定义JPanel背景
|
8月前
|
Java API 计算机视觉
【Java数字图像处理之Swing基础篇】Java绘制太极图
【Java数字图像处理之Swing基础篇】Java绘制太极图
|
Java 图形学 容器
java绘图技术基础
绘图原理: Component类提供了两个和绘图相关最重要的方法: paint(Graphics g)控制组件的外观 repaint()刷新组件的外观 那么通过上面的代码可以发现,我们并没有显示的调用paint方法,然而它似乎自己调用了,这是为什么呢?✨ 在以下情况下paint将会被调用:😁 组件第一次在屏幕显示的时候 窗口最大化和最小化 窗口大小发生变化 repaint方法被调用
169 0
java绘图技术基础
|
Java 图形学 索引
Java实现雪景图-Java的Jframe/Jpanel
Java实现雪景图-Java的Jframe/Jpanel
|
Java 容器
《Java 2 图形设计卷Ⅱ- SWING》第8章 标签与按钮
第8章 标签与按钮   Swing的标签和按钮分别用JLabel和JButton类表示,它们是能够显示文本或图标的简单组件。缺省时,标签没有边框,可以显示一个字符串,一个图标或同时显示字符串和图标。
1411 0