简单画图板的实现
前言
先来欣赏一张图片
这张图片是不是非常神奇,你是不是感受到了代码的强大!下面还有更多图片哦!
接下让我们来实现一个简单的画图板吧
内容框架
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 );
}