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通过消息机制进行绘制的. 我们知道. ...
随机推荐
- Head First 设计模式 —— 12. 状态 (State) 模式
思考题 public class GumballMachine { final static int SOLD_OUT = 0; final static int NO_QUARTER = 1; fi ...
- Docker学习笔记之使用Docker数据卷
Docker数据卷将数据存储到主机而非容器,多个容器需要共享数据时,常常使用数据卷. 1. 为容器设置数据卷(不指定主机目录) 2. 容器与主机之间.容器与容器之间共享数据卷(指定主机目录) 3. 使 ...
- python模块详解 | shutil
简介: shutil是python的一个内置模块,提供了许多关于文件和文件集合的高级操作,特别提供文件夹与文件操作.归档操作了支持文件复制和删除的功能. 文件夹与文件操作: copyfileobj(f ...
- HTML&CSS:构建网站不能不说的那些事儿
很高兴你能看到这个专栏!俗话说得好,相逢即是缘分,没准你和我在上一世也曾有过五百次的回眸,才得此一面.说的有点恶心了,咱还是书归正传,说说这个专栏吧. 这个专栏主要讲的是 HTML 和 CSS 的页面 ...
- 1.2V升3.3V芯片,大电流,应用MCU供电,3.3V稳压源
MCU供电一般是2.5V-5V之间等等都有,1.2V需要升到3.3V的升压芯片来稳压输出3.3V给MCU供电. 同时1.2V的输入电压低,说明供电端的能量也是属于低能量的,对于芯片自身供货是也要求高. ...
- 1、kubernetes简介
Kubernetes简介 文档信息 中文官网:https://kubernetes.io/zh 中文社区:https://www.kubernetes.org.cn/ Kubernetes是容器集群管 ...
- Numpy的一些学习记录
Numpy的一些记录 产生numpy.array的方式 import numpy as np arr1 = np.array([1, 2, 3]) print(arr1) arr2 = np.zero ...
- Linux内存 free 详解
在Linux下,使用top命令看到内存占用情况: Mem: 4146788k total, 3825536k used, 321252k free, 213488k buffers Swap: ...
- MySQL如何加锁控制并发
目录 前言 一.乐观锁 添加version字段 二.悲观锁 读锁 全表锁(LOCK TABLE 表 READ) 行锁(SELECT ... LOCK IN SHARE MODE) 写锁 全表锁(LOC ...
- 下面给出一个child-parent的表格,要求挖掘其中的父子辈关系,给出祖孙辈关系的表格。
package org.apache.hadoop.examples; import java.util.HashMap; import java.io.IOException; import jav ...