Java 窗口 绘制图形 #2
写在前面:
高考结束咧,爽到啊,好耶

完善了Java 窗口 绘制图形 #1里面的程序
加入了缩放平移功能,给代码加了注释
1 package my_package;
2
3 import java.awt.*;
4 import java.awt.Graphics;
5 import java.awt.event.MouseAdapter;
6 import java.awt.event.MouseEvent;
7 import java.awt.event.MouseMotionAdapter;
8 import java.awt.event.MouseWheelEvent;
9 import java.awt.event.MouseWheelListener;
10 import java.io.*;
11 import javax.swing.JFrame;
12 import javax.swing.JPanel;
13
14 public class PonysAlgorithm extends JFrame
15 {
16 private static final long serialVersionUID = 1L;
17 static int pony_winx=800,pony_winy=600;//窗口的长和宽
18 static double c_Pi=3.1415926f;//常数π
19 static int pony_scale=80;//窗口缩放变量
20 static int pony_x0=pony_winx/2,pony_y0=pony_winy/2;//坐标原点
21 static int pony_x0_tmp,pony_y0_tmp;//坐标原点随鼠标移动变化辅助变量
22 static int pony_precision=1000;//绘制时的精度
23 static int pony_framex_ori,pony_framey_ori;//鼠标移动辅助变量
24
25 static double pony_x(double i){//i是参数,此处为x变量表达式
26 return i;
27 }
28 static double pony_y(double i){//i是参数,此处为y变量表达式
29 return (6*(2*Math.pow(i, 7)+Math.pow(i, 4)-i))/Math.pow((Math.pow(i , 6)+2*Math.pow(i, 3)+1), 2);
30 }
31
32 public static void main(String[] args) throws Exception
33 {
34 JFrame ponyFrame=new JFrame("Pony's Algorithm");
35 ponyFrame.setLayout(null);
36 JPanel ponyJPanel=new JPanel(){
37 private static final long serialVersionUID = 1L;
38
39 public void paint(Graphics g){
40 super.paint(g);
41
42 g.setColor(Color.GRAY);
43 /*Coordinate Axis*/
44 g.drawLine(pony_x0, 0, pony_x0, pony_winy);//绘制y轴
45 g.drawLine(0, pony_y0, pony_winx, pony_y0);//绘制x轴
46
47 for(int i=pony_x0+pony_scale;i<=pony_winx;i+=pony_scale)//绘制x、y轴刻度
48 g.drawLine(i, pony_y0-5, i, pony_y0+5);
49 for(int i=pony_x0-pony_scale;i>0;i-=pony_scale)
50 g.drawLine(i, pony_y0-5, i, pony_y0+5);
51 for(int i=pony_y0+pony_scale;i<=pony_winy;i+=pony_scale)
52 g.drawLine(pony_x0-5, i, pony_x0+5, i);
53 for(int i=pony_y0-pony_scale;i>0;i-=pony_scale)
54 g.drawLine(pony_x0-5, i, pony_x0+5, i);
55
56 for(int i=1;pony_x0+i*pony_scale<pony_winx;++i)//绘制x、y轴刻度值
57 g.drawString(""+i, pony_x0+i*pony_scale-4, pony_y0+25);
58 for(int i=-1;pony_x0+i*pony_scale>0;--i)
59 g.drawString(""+i, pony_x0+i*pony_scale-4, pony_y0+25);
60 for(int i=1;pony_y0+i*pony_scale<pony_winy;++i)
61 g.drawString(""+(-i), pony_x0-25, pony_y0+i*pony_scale+4);
62 for(int i=-1;pony_y0+i*pony_scale>0;--i)
63 g.drawString(""+(-i), pony_x0-25, pony_y0+i*pony_scale+4);
64
65 /*CORE*/
66 int tmpa,tmpb;
67 g.setColor(Color.BLUE);
68 for(int i=-100000;i<=100000;++i)//参数i,通过参数i的变化绘制出参数方程图像
69 {
70 tmpa=(int)(pony_x(i/(double)pony_precision)*pony_scale)+pony_x0;
71 tmpb=(int)(-pony_y(i/(double)pony_precision)*pony_scale)+pony_y0;if(tmpb==0) continue;
72 g.drawLine(tmpa, tmpb, tmpa, tmpb);
73 }
74 }
75 };
76
77 /*Whole*/
78 ponyFrame.setSize(pony_winx,pony_winy);
79 ponyFrame.setResizable(false);
80 ponyFrame.setLocationRelativeTo(null);
81 ponyFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
82
83 /*ICON*/
84 File directory = new File("");
85 ponyFrame.setIconImage(Toolkit.getDefaultToolkit().getImage(directory.getCanonicalPath()+"\\icons\\32.png"));
86
87 /*DRAW*/
88 ponyJPanel.setBounds(2, 2, pony_winx-10, pony_winy-10);
89 ponyFrame.add(ponyJPanel);
90 ponyFrame.addMouseListener(new MouseAdapter() {//当鼠标键按下并移动时,记录变量
91 @Override
92 public void mousePressed(MouseEvent e) {
93 pony_framex_ori=e.getXOnScreen();
94 pony_framey_ori=e.getYOnScreen();
95 pony_x0_tmp=pony_x0;
96 pony_y0_tmp=pony_y0;
97 }
98 });
99 ponyFrame.addMouseMotionListener(new MouseMotionAdapter() {//坐标原点的改变
100 @Override
101 public void mouseDragged(MouseEvent e) {
102 pony_x0=pony_x0_tmp+(e.getXOnScreen()-pony_framex_ori)/1;
103 pony_y0=pony_y0_tmp+(e.getYOnScreen()-pony_framey_ori)/1;
104 ponyJPanel.repaint();
105 }
106 });
107 ponyFrame.addMouseWheelListener(new MouseWheelListener() {//鼠标滚轮滚动时,对图像进行缩放
108 @Override
109 public void mouseWheelMoved(MouseWheelEvent e) {
110 if(e.getWheelRotation()==1) {
111 if(pony_scale>10) {
112 pony_scale-=1;
113 ponyJPanel.repaint();
114 }
115 }
116 if(e.getWheelRotation()==-1) {
117 pony_scale+=1;
118 ponyJPanel.repaint();
119 }
120 }
121 });
122
123 ponyFrame.setVisible(true);
124 return;
125 }
126 }
附件:
*jar所在目录*\\icons\\

32.png
Java 窗口 绘制图形 #2的更多相关文章
- Java 窗口 绘制图形 #3
写在前面: 高数下学到第二章,突发奇想要写一个程序画二元函数图像 思路分了三层: ①抽象层: 因变量z,自变量x.y,坐标原点x0.y0.z0 ②投影实现层: 屏幕投影坐标px.py,x轴与屏幕水平方 ...
- Java 窗口 绘制图形 #1
写在前面: editplus换成eclipse了 Sketchpad要钱,买不起 自己搞(rua) by emeralddarkness 建立了一个平面直角坐标系 两个变元x,y,参数i 实现了以下功 ...
- C# 在窗口绘制图形(打点、画圆、画线)
需要包含命名空间 using System.Drawing; 画图前需要先创建画板 void Display() { Graphics g = this.CreateGraphics(); //创建画 ...
- Java 在PPT中绘制图形
Microsoft PowerPoint可支持在幻灯片中插入各种类型的图形并且可设置图形填充.线条颜色.图形大小.位置等.下面将通过Java编程来演示在PPT中绘制图形的方法. 工具:Free Spi ...
- Java 在PDF文档中绘制图形
本篇文档将介绍通过Java编程在PDF文档中绘制图形的方法.包括绘制矩形.椭圆形.不规则多边形.线条.弧线.曲线.扇形等等.针对方法中提供的思路,也可以自行变换图形设计思路,如菱形.梯形或者组合图形等 ...
- Java之绘制方法
绘制图形所用的函数类别分别为视图类.图形单元类和页面类. 对视图类,设置窗口的位置和大小: 对图形单元类,设置图形边界: 对页面类,只有当页面作为元件,该函数才起作用,设置元件边界. 一般构建窗口我们 ...
- python中的turtle库绘制图形
1. 前奏: 在用turtle绘制图形时,需要安装对应python的解释器以及IDE,我安装的是pycharm,在安装完pycharm后,在pycharm安装相应库的模块,绘图可以引入turtle模块 ...
- 第58节:Java中的图形界面编程-GUI
欢迎到我的简书查看我的文集 前言: GUI是图形用户界面,在Java中,图形用户界面我们用GUI表示,而GUI的完整英文为: Graphical User Interface(图形用户接口), 所谓图 ...
- Win32知识之窗口绘制.窗口第一讲
Win32知识之窗口本质 一丶摘要 在学习Win32的时候. 很多操作都是窗口进行操作的.那么今天就说一下窗口的本质是什么. 窗口的本质是不断绘制.是windows通过消息机制进行绘制的. 我们知道. ...
随机推荐
- 【JavaWeb】JSON 文件
JSON 文件 什么是 JSON JSON(JavaScript Object Notation),即 JS 对象符号. 是一种轻量级(相对于 XML 来说)的数据交换格式,易于阅读和编写,同时也易于 ...
- 电子邮箱、邮件地址、网站地址正则表达式!几个有用的RE、regex、regexp!
几个常用的正则表达式! r"\w[-\w\.]*@\w[-\w]*(\.\w[-\w]*)+" 这个是电子邮件地址的. r"<TAG\b[^>]*<(. ...
- go语言循环变量
阅读go语言圣经第五章第六节介绍到了捕获迭代变量 package main import ( "fmt" ) func main() { var lis []func() for ...
- SW3516中文资料书
SW3516 是一款高集成度的快充车充芯片, 支持 A+C 口任意口快充输出, 支持双口独立限流.其集成了 5A 高效率同步降压变换器, 支持 PPS/PD/QC/AFC/FCP/SCP/PE/SFC ...
- Python爬虫:数据分析小能手:JSON库的用法
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. 给大家推荐一个Python交流的q裙,大家在学习遇到了什么问题都可以进群一起交流,大家 ...
- 试玩 GOWOG ,初探 OpenAI(使用 NeuroEvolution 神经进化)与 Golang 多人在线游戏开发
GOWOG: 原项目:https://github.com/giongto35/gowog 我调整过的:https://github.com/Kirk-Wang/gowog GOWOG 是一款迷你的, ...
- Mybatis plus通用字段自动填充的最佳实践总结
在进行持久层数据维护(新增或修改)的时候,我们通常需要记录一些非业务字段,比如:create_time.update_time.update_by.create_by等用来维护数据记录的创建时间.修改 ...
- ubuntu qt5.8 编译qtwebkit
qtwebkit- 下载地址:http://download.qt.io/community_releases/5.8/5.8.0-final/ 问题一 出现如下错误 解决方法 sudo apt- ...
- Model(metaclass=ModelBase)
Python装饰器.metaclass.abc模块学习笔记 - 王智愚 - 博客园 https://www.cnblogs.com/Security-Darren/p/4094959.html dja ...
- 从源码解析Nginx对 Native aio支持_运维_youbingchen的博客-CSDN博客 https://blog.csdn.net/youbingchen/article/details/51767587
从源码解析Nginx对 Native aio支持_运维_youbingchen的博客-CSDN博客 https://blog.csdn.net/youbingchen/article/details/ ...