zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    APICloud框架——获取本地图片信息
    APICloud框架--sublime使用自定义loader
    Felx布局(三)
    Flex布局(二)
    Linux时间与Windows差8个时区的问题解决方法
    警惕javascript代码中的“</script>”!
    字母数字推理题
    “黑客”究竟是什么
    博客园自定义博客侧边栏公告的过滤漏洞
    一行命令实现Android自动关机
  • 原文地址:https://www.cnblogs.com/Antigonae/p/13953359.html
Copyright © 2011-2022 走看看