ImageIO的应用 (AWT和Swing初接触)

这篇具有很好参考价值的文章主要介绍了ImageIO的应用 (AWT和Swing初接触)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ImageIO的应用

一、关于IO流

在讲imageio之前,我们先来复习一下IO流的使用。

这里我建立一个Java类,用来实现读取文档中的内容,并且能够识别换行,话不多说,上代码:

package com.Evan.demo;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

public class ShowFile {
    // 创建方法transReadByBuf()从文件读出内容;
    public void transReadByBuf(File file) {
        FileInputStream fis;
        InputStreamReader isr;
        BufferedReader br;
        String n;
        try {
            fis = new FileInputStream(file);
            isr = new InputStreamReader(fis);
            br = new BufferedReader(isr);

​            while ((n = br.readLine()) != null) {
​    // 从字符输入流中读取文本时可以使用readLine()方法,从而对换行符进行识别,一行一行地读取文本;
​                System.*out*.println(n);
​            }
​            fis.close();
​            isr.close();
​            br.close();
​        } catch (FileNotFoundException e) {
​            e.printStackTrace();
​        } catch (IOException e) {
​            e.printStackTrace();
​        }
​    }

​    //  在测试方法中调用transReadByBuf()方法。
​    public static void main(String[] args) {
​        File file = new File("a.txt");
​        if (!file.exists()) {
​            try {
​                file.createNewFile();
​            } catch (IOException e) {
​                e.printStackTrace();
​            }
​        }
​        ShowFile showFile = new ShowFile();
​        showFile.transReadByBuf(file);
​    }
}

代码是不是简洁易懂?有手就行。

注意一下,这里的文档需要建立在F:\Java_Prj\Java_Project包下

这里贴张图,展示一下文档内容

ImageIO的应用 (AWT和Swing初接触)

然后控制台输出为下图:

ImageIO的应用 (AWT和Swing初接触)

是不是so easy ,以上内容完全是学校老师教的内容,然后下面就是本文的主要内容啦(敲黑板.jpg)!

二、ImageIO读取图片

1.使用AWT绘制窗口

当界面很复杂,代码很多时,我们就建立了一个init()方法用于组装界面,然后在main方法中调用init()方法,代码如下:

package com.Evan.demo;

import java.awt.*;

public class AWT_init {
    Frame frame = new Frame("init方法");
    public void init(){

    }

    public static void main(String[] args) {
        new AWT_init().init();
    }
}

当然啦,上面的代码只是一个小框架,没有实现效果啦;

然后我们用AWT代码来写一个简单的窗口,代码如下:

package com.Evan.demo;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Awt_demo {
    private Frame frame = new Frame();
    
    public void init() throws Exception{

        frame.setBounds(200,200,740,508);

        frame.setVisible(true);

        frame.addWindowListener(new WindowAdapter() {
            //重写方法实现关闭窗口效果
        @Override
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
}

    public static void main(String[] args) throws Exception {
        new Awt_demo().init();
    }
}

实现的效果如下:

ImageIO的应用 (AWT和Swing初接触)

一个小窗口就完成啦!

2.使用imageio读取图片

接下来我们就来写一个关于AWT的代码,用来读取本地图片

package com.Evan.demo;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class Awt_demo {
    private Frame frame = new Frame("图片查看器");

    BufferedImage image;

    private class MyCanvas extends Canvas {
        @Override
        public void paint(Graphics g) {
            g.drawImage(image, 0, 0, null);
        }
    }

    MyCanvas drawArea = new MyCanvas();

    public void init() throws Exception {
        //组装视图

        try {
            File file = new File("C:\\Users\\Evan\\Desktop\\Evan.jpg");
            image = ImageIO.*read*(file);
            drawArea.repaint();

        } catch (IOException e) {
            System.*out*.println(e.getMessage());
        }

        frame.add(drawArea);
        frame.setBounds(200, 200, 740, 508);

        frame.setVisible(true);

        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.*exit*(0);
            }
        });
    }

    public static void main(String[] args) throws Exception {
        new Awt_demo().init();
    }
}

代码实现效果如下:

ImageIO的应用 (AWT和Swing初接触)

这里没有完全展示出图片,不过不要紧,我们可以修改代码

frame.setBounds(200, 200, 740, 508);

数值分别表示(x,y,width,height)

3.使用Swing绘制窗口

package com.Evan.demo;

import java.awt.Graphics;
import java.awt.Image;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;

public class ImageDemo extends JFrame {

​    private Image image;

​    public ImageDemo() {
​        setTitle("图片展示");
​        setBounds(200, 200, 740, 708);
​        setDefaultCloseOperation(WindowConstants.*EXIT_ON_CLOSE*);
​        setVisible(true);
​    }

​    public void loadImage(String path) {
​        try {
​            image = ImageIO.*read*(new File(path));
​        } catch (IOException e) {
​            System.*out*.println(e.getMessage());
​        }
​    }

​    @Override
​    public void paint(Graphics g) {
​        if (image != null) {
​            g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
​        }
​    }

​    public static void main(String[] args) {
​        ImageDemo id = new ImageDemo();
​        id.loadImage("C:\\Users\\Evan\\Desktop\\Evan.jpg");
​        id.repaint();
​    }
}

这里说一下AWT和Swing的比较啦,chat机器人是这样解释的:

AWT(Abstract Window Toolkit)和 Swing 是 Java 中两种用于 GUI 编程的图形库。它们都可以创建各种 GUI 元素,如窗口、按钮、文本框等,并提供了类似事件处理、布局管理等功能。

下面是 AWT 和 Swing 的比较:

  1. 跨平台性:AWT 的组件依赖于本地系统的 GUI 组件,所以在不同的操作系统上显示效果可能会有所不同;而 Swing 使用自己的组件,可以实现真正的跨平台界面设计。
  2. 外观和风格:AWT 组件使用本地系统的外观和样式,所以在不同的操作系统上可能呈现不同的外观;而 Swing 运行时使用相同的外观和风格,可以使应用程序在所有平台上具有相同的外观和行为。
  3. 性能:AWT 组件是本地组件,直接依赖于本地系统的 GUI 组件,所以运行速度比 Swing 快;而 Swing 组件是纯 Java 组件,运行速度相对较慢。
  4. 功能和灵活性:Swing 提供了更多的组件和功能,同时也提供了更好的灵活性和可扩展性,可以满足更复杂的 GUI 设计需求;而 AWT 功能相对较少,灵活性较差。
  5. 学习曲线:Swing 的学习曲线相对于 AWT 更加陡峭,因为它提供了更多的功能和灵活性;而 AWT 的学习曲线比较平缓。

总之,AWT 和 Swing 都是 Java 中用于 GUI 编程的图形库,它们在跨平台性、外观和风格、性能、功能和灵活性以及学习曲线等方面有所区别,开发者可以根据具体需求进行选择。

就本人来说呢,在实现读取图片上最直观的就是Swing需要继承JFrame这个类,以此实现效果,很实用,推荐!

4.ImageIO读取url和load图片

咳咳回到正题,关于读取图片,ImageIO流可以读取链接形式的图片,也可以读取本地的图片。当然啦,上面两个代码块都是读取本地图片的,以下展示读取链接形式图片的代码:

package com.Evan.demo;

import java.awt.Image;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class ReadImage
{
    public static void main( String[] args )
    {
        JFrame jf = new JFrame("图片展示");
        Image image = null;

​        jf.setSize(250, 250);

​        try {
​            URL url = new URL("https://pic.cnblogs.com/avatar/3178304/20230603204309.png");
​            image = ImageIO.*read*(url);
​        } catch (IOException e) {
​            System.*out*.println(e.getMessage());
​        }

​        JLabel label = new JLabel(new ImageIcon(image));
​        jf.add(label);
​        jf.setVisible(true);

​    }
}

效果图如下:

ImageIO的应用 (AWT和Swing初接触)

别看这代码少,但是导入的包多啊,可能这就是Swing的魅力吧

而如果要读取本地图片只需将上面的try catch代码改为:

try {
    File file = new File("C:\\Users\\Evan\\Desktop\\Evan.jpg");
    image = ImageIO.*read*(file);
} catch (IOException e) {
    System.*out*.println(e.getMessage());
}

三、关于Swing JLabel类

1.JLabel介绍

JLabel类可以显示文本或图像。通过在显示区域中设置垂直和水平对齐来对齐标签的内容。默认情况下,标签在显示区域中垂直居中,纯文本标签前沿对齐,仅图像标签水平居中。

如上面代码块中,窗口设置了长宽都是600,正好可以展示出图片全貌,但如果窗口过小,窗口中也会展示图片最中间的内容,即默认水平居中。

2.类构造函数

构造函数 描述
JLabel() 创建一个没有图像且标题为空字符串的JLabel实例。
JLabel(Icon image) 使用指定的图像创建JLabel实例。
JLabel(Icon image, int horizontalAlignment) 使用指定的图像和水平对齐创建JLabel实例。
JLabel(String text) 使用指定的文本创建JLabel实例。
JLabel(String text, Icon icon, int horizontalAlignment) 使用指定的文本,图像和水平对齐创建JLabel实例。
JLabel(String text, int horizontalAlignment) 使用指定的文本和水平对齐方式创建JLabel实例。

当然啦,我们使用的是第二个。

好啦,这次的分享就结束啦,继续学习Java web去了。文章来源地址https://www.toymoban.com/news/detail-477589.html

到了这里,关于ImageIO的应用 (AWT和Swing初接触)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 和ChatGPT关于Swing music的一场对话(上篇)

    什么是 Swing Music ? Swing Music 是一款漂亮的自托管音乐播放器,适用于您的本地音频文件。就像一个更酷的 Spotify …但带上你自己的音乐。 第一次在 reddit 上看到 Swing Music ,就被其 UI 吸引了 但源码站点的 releases 中只有 windows 和 linux 的版本 老苏不是程序员,但作为一个爱折

    2023年04月18日
    浏览(25)
  • 《花雕学AI》03:我最早接触的人工智能应用,还是要从AI绘画说起

    AI绘画是指利用人工智能技术,根据输入的文本或图片,生成逼真或有创意的图像的过程。AI绘画有很多不同的软件和平台,可以让用户体验到AI的魅力和趣味。 AI绘画的历史可以追溯到上世纪70年代,当时一位艺术家哈罗德·科恩开发了一个电脑程序AARON,可以进行绘画创作。

    2024年02月11日
    浏览(31)
  • java使用swing制作桌面图形应用的实例教程

    本篇文章主要讲解,java编程语言通过swing制作桌面图形应用的实例教程,通过一个简单的个人信息提交表单界面,让你了解swing的布局管理、窗口图标设置、编译和运行以及窗口菜单的设置。 日期:2023年8月25日 弹出新窗口帮助文档界面: 说明:设置新窗口图标和主窗口一致

    2024年02月11日
    浏览(26)
  • 使用Graalvm+Swing搓了个原生桌面应用的轮子:文件差异对比工具,附轮子源码

    1、DFDiff介绍 当前已实现的功能比较两个文件夹内的文件差异,已支持文件差异对比。 2、软件架构 软件架构说明 开发环境是在OpenJDK17,UI使用的是Swing + SwingX扩展控件,使用Graalvm编译为原生应用。 文件列表使用的Swingx组件的JXTreeTable。 文件差异对比使用的Swingx组件的JXTabl

    2024年02月08日
    浏览(34)
  • Python中的imageio入门

    目录 Python中的imageio入门 安装imageio 读取图像 显示图像 保存图像 图像处理 imageio是一个功能强大且易于使用的Python库,用于在Python中读取、写入和处理图像。它提供了一种简单且高效的方式来处理图像数据,无论是从文件中读取图像,还是将图像保存到文件,甚至进行图像增

    2024年02月03日
    浏览(24)
  • Java ImageIO 类详解

    Java 中的 ImageIO 类是 Java 标准库中用于处理图像的一个非常常用的 API,它提供了读取和写入多种常见图像格式的功能,如 JPEG、PNG、BMP、GIF 等。开发者可以通过 ImageIO 类轻松地读取和写入图像,而无需考虑底层的细节。本文将全面详细地介绍 Java 中的 ImageIO 类的使用方法。

    2024年02月14日
    浏览(21)
  • python-imageio库简单使用

    目录 imread_v2() get_reader() 使用imageio方法将彩色视频变为黑白视频 相关:python-动图制作及分解_觅远的博客-CSDN博客 imageio是一个用于读取和写入图像及视频数据的库,支持多种格式,且可以使用NumPy数组进行操作。常用方法: imread():从文件中读取图像数据并返回一个NumPy数组

    2024年02月08日
    浏览(24)
  • 苹果macOS 13.5.2正式发布 修复ImageIO进程

    9 月 8 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.5.2 更新(内部版本号:22G91),本次更新距离上次发布隔了 21 天。 需要注意的是,因苹果各区域节点服务器配置缓存问题,可能有些地方探测到升级更新的时间略有延迟,一般半小时内,不会太久。 苹果支持页面,macO

    2024年02月09日
    浏览(30)
  • Java 转换 WebP 图片,使用 webp-imageio

    WebP 是 Google 推出的一种新型图片格式,相比于传统的 PNG/JPG 图片有着更小体积的优势,在当今 Web 中有着广泛的应用。但是 Java 和 JDK 本身不支持 WebP 图像,不过我们可以使用 webp-imageio 库来支持 WebP 图片。 顺便提一提其他库支持的方式。WebP 最早是这个 webp project of Luciad 库提

    2024年02月02日
    浏览(30)
  • Python编程:学习Python自带库imageio和pickle的详细指南

    Python编程:学习Python自带库imageio和pickle的详细指南 Python是一种流行的动态编程语言,它具有简单易学、高效灵活等特点,因此备受欢迎。随着其应用领域的不断扩展,Python付带的自带库变得越来越丰富。在本篇文章中,我们将重点介绍Python常用的自带库imageio和pickle,包括这

    2024年02月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包