博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Java数字图像处理:编程技巧与应用实践》——第3章 基本Swing UI组件与图像显示 3.1 JPanel组件与BufferedImage对象的显示...
阅读量:6530 次
发布时间:2019-06-24

本文共 2859 字,大约阅读时间需要 9 分钟。

本节书摘来自华章计算机《Java数字图像处理:编程技巧与应用实践》一书中的第3章,第3.1节,作者 贾志刚,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第3章

基本Swing UI组件与图像显示

上一章介绍了BufferedImageOp的一些重要知识,实现了几个常见的图像特效,本章介绍如何通过Swing UI组件显示与刷新图像。首先会介绍JAVA Swing的顶层组件JFrame,然后介绍Swing中最重要和使用频率最高的组件JPanel,教会读者重写JComponent中的paintComponent()方法来实现图像的显示,最后会介绍Swing组件JButton捕获与监听用户行为时最重要的ActionListener接口的使用,以及在Swing事件派遣线程中刷新显示等的技巧,希望可指导读者在后续的图像处理实践中,通过Swing UI来实现自己的UI测试类。

本书不是一本专门介绍Java Swing编程的图书,因此要求读者对Java Swing常见组件有基本认识,对Swing事件监听与处理有基本的知识。

本章最主要的目的是实现一个Java Swing UI,即一个测试框架,来测试第4章到第13章中所有继承自AbstractBufferedImageOp抽象类的源代码,帮助读者更好地理解所学到的关于图像处理的知识与内容。

3.1 JPanel组件与BufferedImage对象的显示

刚接触Swing编程的读者可能对JPanel的了解并不多,常常不清楚如何在JPanel中显示图像,而网上的很多教程又是通过JLabel来作为BufferedImage实例显示组件的,这其实不是一种很好的方法,不值得推荐。在JPanel中显示BufferedImage对象实例时,值得推荐的做法应该是通过重载paintComponent()方法来实现图像的显示与及时刷新。这种方法的大致实现可以分为以下几步。

1)重载JPanel中的 paintComponent()方法。

2)获取Graphics2D图形引擎绘制对象,使用drawImage方法绘制图像,代码如下:

protected void paintComponent(Graphics g) {    Graphics2D g2d = (Graphics2D) g;    g2d.clearRect(0, 0, this.getWidth(),                         this.getHeight());    if(sourceImage != null)    {        g2d.drawImage(sourceImage, 0, 0,             sourceImage.getWidth(),             sourceImage.getHeight(), null);        if(destImage != null)        {            g2d.drawImage(destImage,                     sourceImage.getWidth() + 10 ,                0, destImage.getWidth(),                 destImage.getHeight(), null);        }    }}

3)使用repaint()方法及时绘制更新。

以上简单的三步即可实现BufferedImage对象实例在JPanel的现实与刷新。

根据上述方法实现了一个完整的可以显示与刷新BufferedImage对象实例的ImagePanel类,代码如下:

package com.book.chapter.three;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import javax.swing.JPanel;public class ImagePanel extends JPanel {    private static final long serialVersionUID = 1L;    private BufferedImage sourceImage;    private BufferedImage destImage;    public ImagePanel()    {        // do nothing    }    @Override    protected void paintComponent(Graphics g) {        Graphics2D g2d = (Graphics2D) g;        g2d.clearRect(0, 0, this.getWidth(),                     this.getHeight());        if(sourceImage != null)        {            g2d.drawImage(sourceImage, 0, 0,             sourceImage.getWidth(),             sourceImage.getHeight(), null);            if(destImage != null)            {                g2d.drawImage(destImage,                 sourceImage.getWidth() + 10 ,                 0, destImage.getWidth(),                 destImage.getHeight(), null);            }        }    }    public BufferedImage getSourceImage() {        return sourceImage;    }    public void setSourceImage(BufferedImage sourceImage) {        this.sourceImage = sourceImage;    }    public BufferedImage getDestImage() {        return destImage;    }    public void setDestImage(BufferedImage destImage) {        this.destImage = destImage;    }}

转载地址:http://rqhbo.baihongyu.com/

你可能感兴趣的文章
Serv-U 的升级及数据备份和迁移【转】
查看>>
webstorm无法显示左边文件夹目录的解决方法
查看>>
git回滚
查看>>
vue2.0 引用qrcode.js实现获取改变二维码的样式
查看>>
Python 判断闰年,判断日期是当前年的第几天
查看>>
银行卡信息安全事件频发 互联网站成数据泄露"重灾区"
查看>>
云服务器 ECS 使用OpenAPI管理ECS:使用OpenAPI弹性创建ECS实例
查看>>
MongoDB 3.0(1):CentOS7 安装MongoDB 3.0服务
查看>>
别随便安装 Pokemon GO被曝藏恶意后门
查看>>
让数据会思考会说话,为出海企业提供多样化数据智能解决方案
查看>>
我眼中的自动化测试框架设计要点
查看>>
FLIF:自由的无损图像格式
查看>>
Google开源Inception-ResNet-v2,提升图像分类水准
查看>>
Opera 出售细节曝光:昆仑出资1.68亿美元
查看>>
CentOS 5.3 下快速安装配置 PPTP ××× 服务器
查看>>
23种设计模式(15):备忘录模式
查看>>
java基础学习总结——IO流
查看>>
iOS获取APP ipa 包以及资源文件
查看>>
CentOS 7 关闭启动防火墙
查看>>
Vue-选项卡切换
查看>>