关键内容,可以自行扩展

package main;import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Point2D;
import java.util.Vector;import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;public class MainFrame extends JFrame implements MouseListener, MouseMotionListener {/*** */private static final long serialVersionUID = 1L;private JPanel contentPane;private Graphics2D g2;private static Vector<Point2D> pointInfo;/*** Launch the application.*/public static void main(String[] args) {SwingUtilities.invokeLater(() -> {MainFrame mainFrame = new MainFrame();mainFrame.setLocationRelativeTo(null);mainFrame.setVisible(true);});}/*** Create the frame.*/public MainFrame() {addMouseListener(this);addMouseMotionListener(this);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 951, 606);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));contentPane.setLayout(new BorderLayout(0, 0));setContentPane(contentPane);//初始化pointInfo=new Vector<>();}@Overridepublic void paint(Graphics g) {System.out.println("paint");g2 = (Graphics2D) g;int size = pointInfo.size();Point p1,p2;g2.setColor(Color.BLACK);g2.setStroke(new BasicStroke(WIDTH));for (int i = 0; i < size-1; i++) {p1 = (Point) pointInfo.elementAt(i);p2 = (Point) pointInfo.elementAt(i + 1);g2.drawLine(p1.x, p1.y, p2.x, p2.y);}}public void update(Graphics g) {System.out.println("update");paint(g);}@Overridepublic void mouseDragged(MouseEvent e) {System.out.println("mouseDragged");Point cutflag = new Point(e.getX(), e.getY());pointInfo.addElement(cutflag);repaint();}@Overridepublic void mousePressed(MouseEvent e) {Point cutflag = new Point(e.getX(), e.getY());pointInfo.addElement(cutflag);}@Overridepublic void mouseReleased(MouseEvent e) {Point cutflag = new Point(-1, -1);pointInfo.addElement(cutflag);pointInfo.clear();}@Overridepublic void mouseMoved(MouseEvent e) {}@Overridepublic void mouseClicked(MouseEvent e) {}@Overridepublic void mouseEntered(MouseEvent e) {}@Overridepublic void mouseExited(MouseEvent e) {}
}

转载于:https://www.cnblogs.com/dgwblog/p/7913600.html

Swing 100行画图示例相关推荐

  1. WebServer应用示例:不到100行代码玩转Siri语音控制 | ESP32轻松学(Arduino版)

    ESP32轻松学系列文章目录: ESP32 概述与 Arduino 软件准备 蓝牙翻页笔(PPT 控制器) B 站粉丝计数器 Siri 语音识别控制 LED 灯 Siri 语音识别获取传感器数据 本期 ...

  2. 用Arduino玩转掌控板(ESP32):不到100行代码实现Siri语音控制 → WebServer应用示例...

    众所周知,掌控板在创客教育中用的非常广泛,它是一块基于 ESP32 的学习开发板.大家对掌控板编程,用的比较多的都是图形化编程的方式,比如 mPython.Mind+ 等.但是,既然掌控板是基于 ES ...

  3. mysql 透明代理_透明代理MySQL_基于zbus的MySQL透明代理(100行)-云栖社区

    我们上次讲到zbus网络通讯的核心API: Dispatcher -- 负责-NIO网络事件Selector引擎的管理,对Selector引擎负载均衡 IoAdaptor -- 网络事件的处理,服务器 ...

  4. 基于zbus的MySQL透明代理(100行)

    项目地址 https://git.oschina.net/rushmore/zbus 我们上次讲到zbus网络通讯的核心API: Dispatcher -- 负责-NIO网络事件Selector引擎的 ...

  5. PywebIO 轻松制作一个数据大屏,代码只需100行

    今天我给大家分享一个制作数据大屏的工具,非常的好用,100行的Python代码就可以制作出来一个完整的数据大屏,并且代码的逻辑非常容易理解. PywebIO介绍 Python当中的PywebIO模块可 ...

  6. python一般做什么游戏好玩_只需要9步100行Python代码就可以实现一个简单又好玩的弹球游戏...

    今天给大家分享一个有趣又好玩的弹球的游戏,一来可以把类的知识融会一下,二来加深对Python的兴趣.你会发现哎呀Python写小游戏还是蛮方便的,蛮有意思的~~ 需要本文源码:私信回复[源码]即可获取 ...

  7. python简单好玩的代码_只需要9步100行Python代码就可以实现一个简单又好玩的弹球游戏...

    今天给大家分享一个有趣又好玩的弹球的游戏,一来可以把类的知识融会一下,二来加深对Python的兴趣.你会发现哎呀Python写小游戏还是蛮方便的,蛮有意思的~~ 需要本文源码:私信回复[源码]即可获取 ...

  8. Python画图示例(4) 3D绘图

    Python画图示例(1) 一维数据集绘图 Python画图示例(2) 二维数据集绘图 Python画图示例(3) 其他绘图样式,散点图,直方图等 Python画图示例(4) 3D绘图 import ...

  9. 100行代码搞定实时视频人脸表情识别(附代码)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|OpenCV学堂 好就没有写点OpenCV4 + Open ...

最新文章

  1. 深度学习已至“瓶颈”?英特尔:数据处理是一剂良药
  2. 数据库链接池终于搞对了,这次直接从100ms优化到3ms!
  3. wxWidgets:wxWidgets 辅助功能示例
  4. Microsoft Access、MySQL 以及 SQL Server 所使用的数据类型和范围。
  5. python获取字典的值_python取出字典中的所有值的两种方法
  6. Java ClassLoader findSystemClass()方法与示例
  7. ubuntu19 安装git_在Ubuntu 18.04上安装Git
  8. php 给数组里面压入数组,php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)...
  9. 如何在ashx里提取context.Request.Files?
  10. linux源码安装php,nginx配置php
  11. gd公文文件转换成pdf格式
  12. Debian中Nvidia驱动、Firefox、Flash以及alsa声卡驱动安装详解
  13. 使用驱动器中的光盘之前需要将其格式化怎么办,使用驱动器中的光盘之前需要将其格式化寻回方法
  14. java list移除所有元素_Java - List集合中如何删除多个元素? remove( )方法 ?
  15. 虚拟摄像头API对比pyfakewebcam与pyvirtualcam
  16. 第3章第32节:图形的应用:使用图形表达并列关系的内容 [PowerPoint精美幻灯片实战教程]
  17. Adobe又逆天!不用机器学习,用13.5M软件把《长安十二时辰》变成水墨动画
  18. Elastic App Search:免费的产品,可提供出色的搜索体验
  19. 川大和哈工大计算机学院,哈尔滨工业大学计算机科学与技术学院
  20. C语言中的比较大小的宏定义与反斜杠符号 ' \ '

热门文章

  1. php表格无限扩展,php 无限级缓存的类的扩展
  2. 分离圆环图显示百分比_excel这个百分比图,你不一定会制作
  3. 判断素数的java程序_Java代码实例 判断这个数是否是素数
  4. AcWing 905. 区间选点(贪心)
  5. 智乃酱的区间乘积(前缀积+逆元)
  6. 小爱同学100个奇葩回复_奇葩”订单分享:谁还不是个有故事的同学了?
  7. linux 内核 3.3.8,Linux内核编译 Ubuntu 14.04.3 server 升级至3.19.8
  8. [数据库]特殊符号对应的ascii和键盘字符的十六进制表示
  9. Volatile(理解)
  10. 数据结构之算法与线性表