Java_绘图板_初始版==>进阶版

  先在show_plate()函数(方法:顺便提一提,Java的类中只有两个组成1)属性成员 2)方法函数,各种操作都要在函数中进行)建立一个窗体(*容器)JFrame Plate = new JFrame(),用来当所谓的绘图板,基本操作同之前的登陆界面,JFrame类型创建,然后设置大小(setSize()),位置(setLocationRelativeTo()),关闭机制(setDefaultCloseOperation())。

  板有了,那么剩下的就是关键的画笔:由于绘制的线条是在用户鼠标按下和松开的过程来完成,所以我们的画笔本质上是一个监听器,鼠标监听器!监听器在之前的登陆界面中有提到过,一般采用重写Java原有接口的方式创建属于自己的监听器(由于接口是abtract抽象类,所以里边的函数要全部重写,不需要用的写成空函数即可)。

  这里插入先讲讲这个自定义监听器类(DrawerListener)的实现:由于我们关注的是鼠标按下和松开这两个动作,所以我们需要的接口函数是MousePressed和MouseRelease,其他的为空即可。由于线条位置的确定需要坐标,所以在我们自己创建的DrawerListener中添加坐标属性:sx,sy,ex,ey;同时,由于画线的操作也是在鼠标松开的时候完成,所以我们需要利用Graphics(Java中的一个类)来实现绘线。

  • Graphics :在类中创建一个Graphics对象,主要利用setColor,drawLine的绘制线条的函数。
  • MousePressed(MouseEvent e) { }: 我们只需要读取坐标,可使用MouseEvent类中的函数getX(),getY()。
  • MouseReleased(MouseEvent e) {}: 这里不仅要读取末坐标,还要进行线条的绘制(Graphics对象的函数使用)
Java_绘图板_初始版==>进阶版
 1 import java.awt.Color;
 2 import java.awt.Graphics;
 3 import java.awt.event.MouseEvent;
 4 import java.awt.event.MouseListener;
 5 import java.awt.event.MouseWheelEvent;
 6 
 7 //画笔监听器
 8 public class DrawerListener implements MouseListener {
 9     int x1,y1,x2,y2,x3,y3,sx,sy,ex,ey;
10     Graphics graph; //创建画布
11     public void mousePressed(MouseEvent e){
12         System.out.println("Pressed");
13         sx = e.getX();  //注意是得到事件源的坐标,鼠标点击为事件源
14         sy = e.getY();
15     }
16     public void mouseReleased(MouseEvent e){
17         System.out.println("Released");
18         ex = e.getX();
19         ey = e.getY();
20         //松开时,画图
21         graph.setColor(Color.BLUE); //画笔颜色
22         graph.drawLine(sx, sy, ex, ey);
23     }
24     
25     public void mouseClicked(MouseEvent e){}
26     public void mouseEntered(MouseEvent e){}
27     public void mouseExited(MouseEvent e){}
28     
29 }
画笔监听器

   然后再回到我们主体的Drawer类中的show_plate()函数:往窗体里添加一个DrawerListener类,之后在窗体可见之后建立Graphics对象graph,接着获取窗体的画布:graph = Plate.getGraphics(); 接着讲获取的graph赋值给监听器的Pen.graph,因为最终的绘制操作是在监听器中实现的。(其实也可以直接将Plate的画布赋值给Pen.graph,就不创建一个新的对象了)。

Java_绘图板_初始版==>进阶版
 1 public class Drawer {
 2     public void show_plate()
 3     {
 4         JFrame Plate = new JFrame();
 5         Plate.setSize(1000,800);
 6         Plate.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 7         Plate.setLocationRelativeTo(null);
 8         
 9         //创建画笔监听器
10         DrawerListener Pen = new DrawerListener();
11         Plate.addMouseListener(Pen);
12         Plate.setVisible(true);
13         //要在容器可见后,才创建画布
14         Pen.graph = Plate.getGraphics(); //注意Graphics 是一个类,获取窗体的画布对象
15         
16     }
17     
18     public static void main(String[] args){
19         Drawer drawer = new Drawer();
20         drawer.show_plate();
21     }
22 }
Drawer

 

  进阶版:其实就是在原来的基础上增加按钮,来实现选择不同绘制图形,不同颜色

参考https://blog.****.net/a784296404/article/details/80150161

上一篇:centos7 + python 2.7 + pip + openvswitch 杂项问题


下一篇:HTML 5 全局 hidden 属性