java AWT 图片查看器

java AWT 图片查看器

1 package io.guanghe;
 2
 3 import java.awt.*;
 4 import java.awt.event.*;
 5 import java.awt.image.BufferedImage;
 6
 7 public class DrawImage {
 8     private Frame frame = new Frame("光何绘图");
 9     private final int AREA_WIDTH = 500;
10     private final int AREA_HEIGHT = 400;
11     private PopupMenu colorMenu = new PopupMenu();
12     private MenuItem redItem = new MenuItem("red");
13     private MenuItem greenItem = new MenuItem("green");
14     private MenuItem blueItem = new MenuItem("blue");
15     private Color forceColor = Color.BLACK;
16     BufferedImage image = new BufferedImage(AREA_WIDTH, AREA_HEIGHT, BufferedImage.TYPE_INT_RGB);
17     Graphics g = image.getGraphics();
18     private class MyCanvas extends Canvas {
19         @Override
20         public void paint(Graphics g) {
21             g.drawImage(image, 0, 0, null);
22         }
23     }
24     MyCanvas canvas = new MyCanvas();
25     private int preX = -1;
26     private int preY = -1;
27
28     public void init() {
29         frame.addWindowListener(new WindowAdapter() {
30             @Override
31             public void windowClosing(WindowEvent e) {
32                 System.exit(0);
33             }
34         });
35         ActionListener listener = e -> {
36             String actionCommand = e.getActionCommand();
37             switch(actionCommand) {
38                 case "red":
39                     forceColor = Color.RED;
40                     break;
41                 case "green":
42                     forceColor = Color.GREEN;
43                     break;
44                 case "blue":
45                     forceColor = Color.BLUE;
46                     break;
47             }
48         };
49         redItem.addActionListener(listener);
50         greenItem.addActionListener(listener);
51         blueItem.addActionListener(listener);
52         colorMenu.add(redItem);
53         colorMenu.add(greenItem);
54         colorMenu.add(blueItem);
55         canvas.add(colorMenu);
56         canvas.addMouseListener(new MouseAdapter() {
57             @Override
58             public void mouseReleased(MouseEvent e) {
59                 if(e.isPopupTrigger()) {
60                     colorMenu.show(canvas, e.getX(), e.getY());
61                 }
62                 preX = -1;
63                 preY = -1;
64             }
65         });
66         g.setColor(Color.WHITE);
67         g.fillRect(0, 0, AREA_WIDTH, AREA_HEIGHT);
68         canvas.addMouseMotionListener(new MouseMotionAdapter() {
69             @Override
70             public void mouseDragged(MouseEvent e) {
71                 if(preX > 0 && preY > 0) {
72                     g.setColor(forceColor);
73                     g.drawLine(preX, preY, e.getX(), e.getY());
74                 }
75                 preX = e.getX();
76                 preY = e.getY();
77                 canvas.repaint();
78             }
79         });
80         canvas.setPreferredSize(new Dimension(AREA_WIDTH, AREA_HEIGHT));
81         frame.add(canvas);
82         frame.pack();
83         frame.setVisible(true);
84     }
85
86     public static void main(String[] args) {
87         new DrawImage().init();
88     }
89 }

Original: https://www.cnblogs.com/guanghe/p/16362104.html
Author: 光何
Title: java AWT 图片查看器

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/537235/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 华为暑期实习 通用软件开发 面经

    华为暑期实习 通用软件开发工程师 数据存储与机器视觉 面经 机试 7.6 第一题 字符串匹配 给五行英文句子,找出来其中的网址,网址以http或https开头,以com结尾,不要重…

    Java 2023年6月5日
    0111
  • 启用Hyper-v后,重启后界面提示 无法完成功能配置,正在撤销更改

    安装docker后,提示需要启用hyper-v,在控制面板中勾选Hyper-v,然后重启,更新快完成就提示无法完成功能配置,正在撤销更改 解决方法 方法1 控制面板一个一个选 方法…

    Java 2023年6月16日
    0109
  • 邮件任务-springboot

    springboot可以很容易实现邮件的发送 具体实现步骤: org.springframework.boot spring-boot-starter-mail 2.5.2 spr…

    Java 2023年6月13日
    077
  • 同一台电脑生成多份ssh私钥和公钥,映射多个GitHub账号

    当我们使用 Git 进行代码版本控制时,经常出现一台电脑需要连接多个Git 账号的情况,此时需要在一台电脑上生成多份 ssh 私钥和密钥,同时映射多个 Git 账号;这里我们需要同…

    Java 2023年6月5日
    068
  • Java实现AES加密

    生成秘钥简单粗暴 这边AES秘钥默认为128位,获得无政策权限后可为192或256,因此对应字符为16位,直接生成16位的秘钥 import java.io.Unsupported…

    Java 2023年6月5日
    0114
  • Java基础-集合篇

    2.1.接口继承关系和实现 ​ 集合类存放于 Java.util 包中,主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。 Collection:C…

    Java 2023年6月8日
    085
  • Auto Sacling调整资源提高可用性

    什么是 Auto Sacling? 弹性伸缩(Auto Scaling,以下简称AS)是根据用户的业务需求,通过设置伸缩规则来自动增加/缩减业务资源。当业务需求增长时,AS自动为您…

    Java 2023年6月9日
    078
  • 写了个简洁的Typora+Markdown简历模板

    项目地址:https://github.com/CodingDocs/typora-markdown-resume (欢迎小伙伴们使用!个人能力有限,也欢迎小伙伴们一起完善这个简历…

    Java 2023年6月9日
    078
  • SpringCloud+Alibaba微服务教程,Java自学/进阶程序员必看

    正文 Spring Cloud是目前市面上最火爆的Java微服务技术栈,因其功能丰富涉及微服务管理全面,并且在高可靠、高可阔以及在应对复杂业务和承受并发的能力上发挥出色,使其受到众…

    Java 2023年6月9日
    082
  • json对象的转换(3)在springmvc-controller中将对象转为json同1

    String json = ""; // 创建一个json&#x…

    Java 2023年6月9日
    088
  • quartz框架(四)-Job相关内容

    本篇博文,博主主要介绍job相关的内容。 job是业务类需要实现的接口,代表需要被调度框架进行调度的任务。job源码如下所示,从源码中我们可以看到,job接口只有一个excute方…

    Java 2023年6月7日
    075
  • 分布式任务调度平台XXL-JOB安装

    安装xxl-job-admin 1.拉取镜像 #拉取镜像 docker pull xuxueli/xxl-job-admin:2.3.0 #新建挂载目录 mkdir /usr/lo…

    Java 2023年6月15日
    092
  • jvm:内存结构与对象内存解析

    java的跨平台性主要是因为其字节码文件可以在任何具有java虚拟机的计算机或者电子设备上运行,jvm中的字节码解析器负责将字节码文件解释成机器码运行,字节码文件.class是ja…

    Java 2023年6月7日
    088
  • ThreadLocal源码解析,内存泄露以及传递性

    我想ThreadLocal这东西,大家或多或少都了解过一点,我在接触ThreadLocal的时候,觉得这东西很神奇,在网上看了很多博客,也看了一些书,总觉得有一个坎跨不过去,所以对…

    Java 2023年6月5日
    0107
  • IDEA 设置快捷键上下整行

    快捷键上下整行 点击新增快捷键 posted @2022-09-16 20:25 一蓑烟雨任平生。。 阅读(8 ) 评论() 编辑 Original: https://www.cn…

    Java 2023年6月7日
    088
  • 进程与线程

    简单的比喻:进程=火车,线程=车厢 进程:进程(process)是程序的一次动态执行过程,是一个正在执行的程序的实例。程序是指令、数据及其组织形式的描述,是一个没有生命的实体,只有…

    Java 2023年6月5日
    095
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球