public void mousePressed(MouseEvent e) { //鼠标按压
x1 = e.getX();
y1 = e.getY();
System.out.println("press!");
}
@Override
public void mouseReleased(MouseEvent e) { //鼠标释放
x2 = e.getX();
y2 = e.getY();
System.out.println("release!");
}
@Override
public void mouseEntered(MouseEvent e) { //鼠标进入界面
System.out.println("In");
}
@Override
public void mouseExited(MouseEvent e) { //鼠标离开界面
System.out.println("Out");
}
//MouseListener接口只有这么多方法
}
**自己设计函数**
//画折线函数
Random random_num = new Random();
public void drawKLine(int x1,int y1,int x2,int y2,int range){ //实现一个画折线函数:折线实现方式:每次找一个线段中点,当线段中点距离左边(右边)端点小于3的时候就将这个点与左边(右边端点)连接起来。用递归的方法实现。
if(Math.abs(x2-x1)<3){ //结束条件
mypen.drawLine(x1,y1,x2,y2); //调用画笔的连线方法
return;
}
int cx = (x1+x2)/2; //找中点坐标
int cy = (y1+y2)/2;
range *=0.7; //中点的y坐标要上下偏移,但是偏移的界限有限
cy+= random_num.nextInt(range)-(range/2); //在这个界限里面生成随机偏移值
drawKLine(x1,y1,cx,cy,range); //递归这个方法
drawKLine(cx,cy,x2,y2,range);
}
Graphics
=========
画笔类Graphics。定义画笔对象,需要从界面函数的getGraphics()方法获得。
Graphics pen = jf.getGraphics();
画笔对象可以调用很多方法,例如画线函数drawLine();然后这个方法可以用在监听器的方法里面。(监听器类里面没有界面函数,可以先定义画笔对象<作为监听器函数的属性成员>,方法内使用。在UI要通过界面的getGraphics()函数获得一个画笔对象,并将这个对象赋值给监听器的画笔成员,赋值的时机必须要在监听器方法使用到这个画笔之前)
mypen.drawLine(x1,y1,x2,y2);
![](https://img-blog.csdnimg.cn/20210724195141370.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY1ODAyNw==,size_16,color_FFFFFF,t_70)
练习
===
//实现画一条线,在这个线段之间生成一段折线图
//byUI.java
import javax.swing.*;
import java.awt.*;
public class byUI {
public void initUI(){
JFrame jf = new JFrame("沪深K线图");
jf.setSize(1000,800);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
Graphics pen = jf.getGraphics();
byListener mylis = new byListener();
mylis.mypen=pen;
jf.addMouseListener(mylis);
}
public static void main (String[] args){
byUI myui = new byUI();
myui.initUI();
}
}
//byListener.java
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;
public class byListener implements MouseListener {
int x1,y1,x2,y2,x,y;
Graphics mypen;
@Override
public void mouseClicked(MouseEvent e) {
x = e.getX();
y = e.getY();
System.out.println("click!");
}
@Override
public void mousePressed(MouseEvent e) {
x1 = e.getX();
y1 = e.getY();
System.out.println("press!");
}
@Override
public void mouseReleased(MouseEvent e) {
x2 = e.getX();
y2 = e.getY();
System.out.println("release!");
mypen.drawLine(x1,y1,x2,y2);
drawKLine(x1,y1,x2,y2,500);
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("In");
}
@Override
public void mouseExited(MouseEvent e) {
知其然不知其所以然,大厂常问面试技术如何复习?
1、热门面试题及答案大全
面试前做足功夫,让你面试成功率提升一截,这里一份热门350道一线互联网常问面试题及答案助你拿offer
2、多线程、高并发、缓存入门到实战项目pdf书籍
3、文中提到面试题答案整理
4、Java核心知识面试宝典
覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入
多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入**
[外链图片转存中…(img-QhVwOe0i-1630378806385)]
[外链图片转存中…(img-waOmHb3A-1630378806386)]
[外链图片转存中…(img-rdsPKm1B-1630378806386)]