画图板的实现— —让你成为抽象派画家

简单画图板的实现

前言

先来欣赏一张图片

在这里插入图片描述

这张图片是不是非常神奇,你是不是感受到了代码的强大!下面还有更多图片哦!

接下让我们来实现一个简单的画图板吧

内容框架

1.创建一个画图的JFrame界面
2.给界面添加鼠标事件监听器
3.加入画布
4.创建功能更多的画图板(延申)

创建界面

public class Drawpicture{
	public void showUI{
JFrame jf=new JFrame("胡必成自创画图板");
jf.setSize(1200, 800);//设置界面的大小
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)//设置关闭
jf.setLayout(new FlowLayout());//设置流式布局
jf.setLocationRelativeTo(null);//居中
jf.getContentPane().setBackground(Color.BLACK);//设置界面的颜色
jf.setVisible(true);//设置界面可见
 	}
 public static void main(String[] args){
 	 Drawpicture hu = new Drawpicture();
    hu.UI();//显示界面
 }
}

添加监听器

  DrawListener Lis = new DrawListener();
 jf.addMouseListener(Lis);

设置画布

   Graphics g = jf.getGraphics();//JFrame有getGraphics的方法
   Lis.g =g;
接下来可以绘制图形啦
package 简单的画图板;
import java.awt.Graphics;//绘图组件
import java.awt.Color;//颜色
import java.awt.event.MouseEvent;//鼠标事件
import java.awt.event.MouseListener;
public class DrawListener implements MouseListener{
	 //Graphics:对象获取:需要在哪个组件上绘图,就根据该组件调用getGraphics的方法
 Graphics g;//从界面上获取画布对象    
    public void mouseClicked(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mousePressed(MouseEvent e){}   
    //可不使用其中的方法
 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    public void mouseReleased(MouseEvent e){
     //获取鼠标松开的位置坐标
     int x=e.getX();
     int y=e.getY();
       //根据位置指定颜色
     //创建颜色使用对象,***接下来可以画小熊了***
     Color bi1 = new Color(0, 255, 255);
     Color bi2 = new Color(255, 255, 0);
     Color bi3 = new Color(255, 0, 255);
     Color color = new Color(x%225,y%200,255);
     g.setColor(color);
     g.fillOval(x, y, 200, 200);//大圆
     g.fillOval(x-7,y-7 , 60, 60);
     g.fillOval(x+150,y-15 , 60, 60);//两个耳朵
     //两个眼睛
     g.setColor(bi1);
     g.fillOval(x+70, y+80, 10, 10); 
     g.setColor(bi2);
     g.fillOval(x+120,y+80, 10, 10); 
     
     //嘴巴
     g.setColor(bi3);
     g.fillRect(x+85, y+130, 30, 20);     
     g.drawRect(x%200, y%200, 60, 60);//画矩形
     g.fillArc(x%255, y%255, 40, 40, 0, 30);//画扇形
    }
    public void mouseExited(MouseEvent e){}
    }

###上面的画图板可以实现的简单图形
如下:这个小熊是不是非常可爱

这个小熊是不是非常可爱!

创建功能更多的画图板

在上面的基础上我们可以在画图板上添加各种组件,如之直线,圆形,还有自创的小熊。如果再复杂一点我们可以加上一些迭代图形,还有用二维数组画的图形。除了这些,你还可以添加各种功能,如撤销,改变颜色等等,这些功能今天我就不说了,这些我会在下一博客里写出来。

接下来是一些复杂图形的代码,仅供参考:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class DrawListener implements MouseListener,ActionListener{
 	int startx,starty,endx,endy,x,y;
		 Graphics g;
	 //记录图形信息
 String shapeTypeStr = "";
   public void actionPerformed(ActionEvent e){
 //获取当前点击的按钮的信息
    String action = e.getActionCommand();
    shapeTypeStr = action;
   }
     public void mousePressed(MouseEvent e){
      startx =e.getX();获取坐标
      starty =e.getY();
     }
     public void mouseReleased(MouseEvent e){
      
      endx =e.getX();
      endy =e.getY();  
      if("直线".equals(shapeTypeStr)){
       Color hu = new Color(255, 0,255);
       g.setColor(hu);
       g.drawLine(startx, starty, endx, endy);
      }else
       if("迭代图形1".equals(shapeTypeStr)){
      double x=0;
      double y=0;
      double a=-1.8,b=-2,c=-0.5,d=-0.9;
      for(int i=0;i<255000;i++){
       double temx= Math.sin(a*y)+c*Math.cos(a*x);
       double temy= Math.sin(b*x)+d*Math.cos(b*y);
       int x1=(int)(temx*100+180);
       int y1=(int)(temy*100+400);//强制转换
       //System.out.println("x1:"+x1+"y1:"+y1);
       
       x=temx;
       y=temy;
      
        Color hu1 = new Color(0, 0,i/1000);
        g.setColor(hu1);
        g.drawLine(x1, y1, x1,y1 );
       
      }
       }else
        if("迭代图形2".equals(shapeTypeStr)){
         double x=0;
            double y=0;
            double a=-1.7,b=1.8,c=-1.9,d=-0.4;
            for(int i=0;i<255000;i++){
             double temx= Math.sin(a*y)+c*Math.cos(a*x);
             double temy= Math.sin(b*x)+d*Math.cos(b*y);
             int x1=(int)(temx*100+610);
             int y1=(int)(temy*100+400);
             //System.out.println("x1:"+x1+"y1:"+y1);
             
             x=temx;
             y=temy;
            
              Color hu1 = new Color(20, i/1000,20);
              g.setColor(hu1);
              g.drawLine(x1, y1, x1,y1 );
            } 
        }else
	 if("迭代图形3".equals(shapeTypeStr)){
          double x=0;
      double y=0;
      double a=-1.7,b=1.3,c=-0.1,d=-1.2;
      for(int i=0;i<2550000;i++){
      double temx= Math.sin(a*y)+c*Math.cos(a*x);
      double temy= Math.sin(b*x)+d*Math.cos(b*y);
      int x1=(int)(temx*100+1050);
      int y1=(int)(temy*100+400);
      //System.out.println("x1:"+x1+"y1:"+y1);
              
              x=temx;
              y=temy;
             
           Color hu1 = new Color(i/10000, 0,0);
           g.setColor(hu1);
            g.drawLine(x1, y1, x1,y1 ); 
             }
         }else
          if("迭代图形4".equals(shapeTypeStr)){
          double x=0;
             double y=0;
             double a=1.40,b=1.56,c=1.40,d=-6.56;
             for(int i=0;i<255000;i++){
        double temx = d*Math.sin(a*x)-Math.sin(b*y);
        double temy = c*Math.cos(a*x)+Math.cos(b*y);
         
         int x1=(int)(temx*50+600);
         int y1=(int)(temy*50+400);
              //System.out.println("x1:"+x1+"y1:"+y1);
               
               x=temx;
               y=temy;
              
          Color hu1 = new Color(i/1500, 50,0);
            g.setColor(hu1);
            g.drawLine(x1, y1, x1,y1 );
              }  
          }else 
          if("迭代图形5".equals(shapeTypeStr)){
          double x=0; 
          double y=0;
          double a=1,b=4,c=60;
          for(int i=0;i<2550000;i++){
       double temx=y-Math.signum(x)*Math.pow(Math.abs(b*x-c), (1.0/2));
       double temy=a-x;
       int x1=(int)(temx/3+500);
       int y1=(int)(temy/3+400);
       //System.out.println("x1:"+x1+"y1:"+y1);
       
       x=temx;
       y=temy;
      
       Color hu1 = new Color(i/10000, 20,i/10000);
       g.setColor(hu1);
       g.drawLine(x1, y1, x1,y1 );
      }
      }else
 if("图形6".equals(shapeTypeStr)){
        double x=1; 
        double y=1;
           double a=-10;
           for(int i=0;i<2550000;i++){
       double temx= x*Math.cos(a)-(y-Math.pow(x, 2))*Math.sin(a);
       double temy= x*Math.sin(a)+(y-Math.pow(x, 2))*Math.cos(a);
            int x1=(int)(temx*100+600);
            int y1=(int)(temy*100+400);
            //System.out.println("x1:"+x1+"y1:"+y1);
            x=temx;
            y=temy;
           
       Color hu1 = new Color(i/10000, i/10000,50);
         g.setColor(hu1);
         g.drawLine(x1, y1, x1,y1 );
       }

这些组件就可以实现下面的功能了是不是感觉很好看

发布了5 篇原创文章 · 获赞 7 · 访问量 1128

猜你喜欢

转载自blog.csdn.net/weixin_45743887/article/details/103150136