Java学习笔记(三,面试复盘

该博客介绍了如何在Java GUI环境中使用MouseListener接口监听鼠标事件,结合Graphics类绘制直线和折线。通过在鼠标按下和释放事件中获取坐标,实现了线段的绘制,并利用递归方法生成随机折线效果。此外,还展示了如何在UI初始化时设置监听器和获取Graphics对象来完成绘图操作。
摘要由CSDN通过智能技术生成
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

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

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)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值