当前位置: 首页 > news >正文

57.【Java 接口】

接口

    • 1.finnal关键字的作用:
    • 2.高内聚低耦合
    • 3.抽象类(abstract):
    • 5.接口:
        • 1.定义:
        • 2.声明:
        • 3.实现接口:
    • 6.事件处理机制
  • (一)、键盘事件(KeyListener)
    • 7.键盘移动小球
    • 8.《贪吃的宝马》
    • 9.八方向的操作
  • (二)、鼠标操作(MouseLister)
        • 1.MouseListener单击操作
        • 2.MouseMotinListener(移动操作)
  • (三)、窗体事件(WindowListener)
  • (四)、综合测试:打字幕游戏

1.finnal关键字的作用:

finnal: 表示最终的不可变的,
继承可以提高代码的复用性和灵活性。但有时我们并不希望类中的方法被重写和修改,这时我们就需要用到final关键字。

final、abstract关键字修饰类:加在class前,权限符后,这样此类就不能有子类。

(1).finnal 修饰的变量,是常量. (不能被修改)

final int a=5;

在这里插入图片描述

(2).finnal 修饰的方法是最终的方法,是不能够被覆盖的。

 final public void show(){} 

在这里插入图片描述

(3).由finnal 修饰的类是最终类,是不允许被继承的。
final class a{}
在这里插入图片描述

2.高内聚低耦合

高内聚含义:在类的内部的属性是紧密联合的
低耦合含义:在类与类之间是有很大区别的。

3.抽象类(abstract):

对共同的特征进行抽象。

abstract 加在权限符后,类型前。final加在权限符前。(有区别的)

abstract表示抽象的,可以修饰类和方法:
(1).由abstract修饰的方法,叫做抽象方法。只有方法声明,没有方法体

public abstract void show();

(2).由abstract修饰的类,叫做抽象类。抽象类不能创建对象。

abstract class hello{}

(3).如类中有抽象方法,则该类必定是抽象类。

abstract class hello{

public abstract void show();
public abstract void show2();
public  void show();}

(4).抽象类中,可以没由抽象方法;

(5)、一个抽象类中的方法全部是抽象方法,那么我们把这个抽象类叫做接口

abstract class hello{

public abstract void show();
public abstract void show2();
public  abstract void show();
}

5.接口:

1.定义:

一个抽象类中的方法全部是抽象方法,并且这个中根本没有必要声明成员变量,我们称作这样的类叫做纯抽象类,在JAVA中纯抽象类叫做:接口.

2.声明:

interface 接口名
{
常量声明;
抽象方法声明:

}

在这里插入图片描述

3.实现接口:

实现的时候不必要是(抽象类)

class 类名 implements 接口名{
	public 抽象方法声明
}

6.事件处理机制

在这里插入图片描述

(1)、事件源:产生事务的组件。(按钮、窗体。画布)谁是监听者,谁是事件源。
(2)、事件:用户在界面上的操作。
(3)、监听器:是一个专门用于处理事件的的类,它接收事件并且产生相应的动作。
(4)、如果希望某一个事件源能够产生反应,要事先为其注册相应的监听器。

(一)、键盘事件(KeyListener)

在这里插入图片描述
接口的实现:

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class panel1 extends Panel implements KeyListener {   //监听者 panel  
    public void paint(Graphics g){
        g.fillOval(100,100,200,200);
    }
    @Override
    public void keyTyped(KeyEvent e1) {

    }
    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println("您按下了:"+e.getKeyChar());  //按下的字符
        System.out.println("按下的是:"+e.getKeyCode());   //按下的ascll码
    }

    @Override
    public void keyReleased(KeyEvent e) {
        System.out.println("您松开了:"+e.getKeyChar());
        System.out.println("您松开了:"+e.getKeyCode());
    }
}
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {
    public static void main(String[] avgs) {
      Frame f=new Frame("贪吃的宝马");
        f.setSize(300,300);
        panel1 p1=new panel1();
        f.add(p1);
        f.addKeyListener(p1);  //注册监听器
        // p1.addKeyListener(p1);  //为画板注册监听器
        //f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}


在这里插入图片描述

7.键盘移动小球

类方法:

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

class panel extends Panel implements KeyListener {   //实现接口
    int x=200;
    int y=200;
    public void paint(Graphics g){
        g.fillOval(x,y,40,40);
    }
    public void keyPressed(KeyEvent e){   //接口方法声明
        if(e.getKeyCode()==37){  //左
            x--;
        }
        if(e.getKeyCode()==38){  //上    
            y--;
        }
        if(e.getKeyCode()==39){  //右	
            x++;
        }
        if(e.getKeyCode()==40){  //下	
            y++;
        }
        repaint();
    }
    public void keyReleased(KeyEvent e){	//接口方法声明

    }
    public void keyTyped(KeyEvent e){	//接口方法声明

    }
}

主方法:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {
    public static void main(String[] avgs) {
      Frame f=new Frame("移动的小球");
        f.setSize(500,500);
        panel p=new panel();
        f.add(p);
        f.addKeyListener(p);  //为frame注册监听器
        p.addKeyListener(p);  //为panel注册监听器
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}

8.《贪吃的宝马》

基本是路:
首先我们要使用画板frame和画笔paint;首先第一步要绘画宝马车标。然后进行实列化。然后把画笔加入画板当中去。然后接入接口 KeyLister。利用键盘里面的接口方法,进行键盘控制。37=左,38=上,39=右,40=下。然后在画板中注册一个画板的监听器和画笔的监听器(主要是为了让鼠标能够动);

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

class panel extends Panel implements KeyListener {  //插入接口
    int x=200;
    int y=200;
    int wideth=40;
    int height=40;
    int m=10;
    int n=10;
    int r1=0;
    int g1=0;
    int b1=0;
    public void paint(Graphics g){
        //绘制食物
        Color c5=new Color(r1,g1,b1);
        g.setColor(c5);
        g.fillOval(m,n,20,20);

        //绘制宝马:
        Color c=new Color(0,0,0);
        g.setColor(c);
        g.fillOval(x,y,wideth,height);
        Color c1=new Color(255,255,255);
        g.setColor(c1);
        g.fillOval(x+25,y+25,wideth-50,height-50);
        Color c2=new Color(0,0,255);
        g.setColor(c2);
        g.fillArc(x+25,y+25,wideth-50,height-50,90,90);
        g.fillArc(x+25,y+25,wideth-50,height-50,270,90);

    }
    public void keyPressed(KeyEvent e){    //抽象方法
        //键盘控制和移速
        if(e.getKeyCode()==37){  //左
            x=x-10;
        }
        if(e.getKeyCode()==38){  //上
            y=y-10;
        }
        if(e.getKeyCode()==39){  //右
            x=x+10;
        }
        if(e.getKeyCode()==40){  //下
            y=y+10;
        }
        if(m>=x&&m<=x+wideth&&n>=y&&y<=y+height){  //假如吃到食物
            //食物随机
            Random r=new Random();
            m=r.nextInt(1480)+1;
            n=r.nextInt(900)+1;
            r1=r.nextInt(255)+1;
            g1=r.nextInt(255)+1;
            b1=r.nextInt(255)+1;
            //长大
            wideth=wideth+20;
            height=height+20;
        }
        repaint();  //动态
    }
    public void keyReleased(KeyEvent e){   //抽象方法

    }
    public void keyTyped(KeyEvent e){     //抽象方法

    }
}
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {
    public static void main(String[] avgs) {
      Frame f=new Frame("贪吃的宝马");
        f.setSize(1880,1000);
        panel p=new panel();
        f.add(p);
        f.addKeyListener(p);  //注册监听器
        p.addKeyListener(p);  //为画板注册监听器
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}

9.八方向的操作

基本思路:
我们要使用KeyLister的接口,然后分别使用按下的抽象方法和松开的方法。当我们松开的时候,我们把值赋值为false.

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
class panel extends Panel implements KeyListener {  //实现接听功能
    int x=100;
    int y=100;
    boolean press_a;
    boolean press_w;
    boolean press_d;
    boolean press_s;
    public void paint(Graphics g){
        Font f=new Font("黑体",Font.BOLD,50);
        g.setFont(f);
        Color c=new Color(0,0,0);
        g.setColor(c);
        g.drawString("*",x,y);
        }
    @Override
    public void keyTyped(KeyEvent e) {

    }
    @Override
    public void keyPressed(KeyEvent e) {
     int i=e.getKeyCode();  //当按下操作
    if(i==37){
        x=x-10;
    }
    if(i==38){
        y=y-10;
    }
    if(i==39){
        x=x+10;
    }
    if(i==40){
        y=y+10;
    }
    switch (i){
        case 37: press_a=true;break;
        case 38: press_w=true;break;
        case 39:press_d=true;break;
        case 40:press_s=true;break;
        default:break;
    }
    if (press_a&&press_s){
        x=x-10;
        y=y+10;
    }
        if (press_a&&press_w){
            x=x-10;
            y=y-10;
        }
        if (press_w&&press_d){
            x=x+10;
            y=y-10;
        }
        if (press_d&&press_s){
            x=x+10;
            y=y+10;
        }
    repaint();
    }
    @Override
    public void keyReleased(KeyEvent e) {
        int i=e.getKeyCode();   //当松开操作
        switch (i){
            case 37: press_a=false;break;
            case 38: press_w=false;break;
            case 39:press_d=false;break;
            case 40:press_s=false;break;
            default:break;
        }
    }
}
import java.awt.*;
public class hello {
    public static void main(String []avgs){
        Frame f=new Frame("小球移动八个方向");
        f.setSize(800,800);
        f.setLocationRelativeTo(null);
        panel p=new panel();
        f.add(p);
        f.addKeyListener(p);
        p.addKeyListener(p);
        f.setVisible(true);
    }
}

(二)、鼠标操作(MouseLister)

1.MouseListener单击操作

基本知识点:调用MouseLister接口,然后使用构造方法mouseClicked(),然后通过 e.getX()获得,x的坐标。通过e.getY()获得y的坐标。即可

import java.awt.*;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

class panel extends Panel implements MouseListener {
    int []x=new int[20];
    int []y=new int[20];
    String []s1=new String[]{"1","2","1","2","1","2","1","2","1","2",};   //利用数组进行储存
    int j=0;
    //画框架
    public void paint(Graphics g){
        //设置颜色
        Color c=new Color(0,0,0);
        g.setColor(c);
        //矩形
        g.drawRect(200,200,450,450);
        //线
        g.drawLine(200,350,650,350);
        g.drawLine(200,500,650,500);
        g.drawLine(350,200,350,650);
        g.drawLine(500,200,500,650);
        if(j%2==0) {
            Color c1 = new Color(255, 0, 0);
            g.setColor(c1);
        }
        Font f=new Font("黑",Font.BOLD,30);
        g.setFont(f);
        x[0]=100;
        y[0]=100;
        for(int i=0;i<j+1;i++) {
            g.drawString(s1[i], x[i], y[i]);
        }
        //判断输赢

        j++;
        }
    @Override
    public void mouseClicked(MouseEvent e) {
        x[j]=e.getX();
        y[j]=e.getY();
        if(x[j]>200&&x[j]<350&&y[j]>200&&y[j]<350){
            x[j]=275;
            y[j]=275;
        }if(x[j]>200&&x[j]<350&&y[j]>350&&y[j]<500){
            x[j]=275;
            y[j]=425;
        }if(x[j]>200&&x[j]<350&&y[j]>500&&y[j]<650){
            x[j]=275;
            y[j]=575;
        }
        if(x[j]>350&&x[j]<500&&y[j]>350&&y[j]<500)
        {
            x[j]=425;
            y[j]=425;
        }if(x[j]>350&&x[j]<500&&y[j]>200&&y[j]<350)
        {
            x[j]=425;
            y[j]=275;
        }if(x[j]>350&&x[j]<500&&y[j]>500&&y[j]<650)
        {
            x[j]=425;
            y[j]=575;
        }
        if(x[j]>500&&x[j]<650&&y[j]>500&&y[j]<650){
            x[j]=575;
            y[j]=575;
        }if(x[j]>500&&x[j]<650&&y[j]>200&&y[j]<350){
            x[j]=575;
            y[j]=275;
        }if(x[j]>500&&x[j]<650&&y[j]>350&&y[j]<500){
            x[j]=575;
            y[j]=425;
        }
        repaint();
    }
 @Override
    public void mousePressed(MouseEvent e) {
        System.out.println("鼠标被按下:");
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        System.out.println("鼠标被松开");
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        System.out.println("----------鼠标进入框体--------");
    }

    @Override
    public void mouseExited(MouseEvent e) {
        System.out.println("*********鼠标离开框体**********");
    }  //实现接听功能
import java.awt.*;
public class hello {
    public static void main(String []avgs){
        Frame f=new Frame("小球移动八个方向");
        f.setSize(900,900);
        f.setLocationRelativeTo(null);
        panel p=new panel();
        f.add(p);
        f.addMouseListener(p);
        p.addMouseListener(p);
        f.setVisible(true);
    }
}

在这里插入图片描述

2.MouseMotinListener(移动操作)

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

class panel extends Panel implements MouseMotionListener {
    int x=100;
    int y=100;
    public void paint(Graphics g) {
        g.fillOval(x,y,20,20);
    }

    @Override
    public void mouseDragged(MouseEvent e) {  //鼠标按下并拖动
//        x=e.getX();
//        y=e.getY();
//        repaint();
    }

    @Override
    public void mouseMoved(MouseEvent e) {   //鼠标移动不用按下
        x=e.getX();
        y=e.getY();
        repaint();
    }
}

import java.awt.*;
public class hello {
    public static void main(String []avgs){
        Frame f=new Frame("小球移动八个方向");
        f.setSize(900,900);
        f.setLocationRelativeTo(null);
        panel p=new panel();
        f.add(p);
        f.addMouseMotionListener(p);
        p.addMouseMotionListener(p);
        f.setVisible(true);
    }
}

(三)、窗体事件(WindowListener)

import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

class panel extends Panel implements WindowListener {

    public void paint(Graphics g){
        g.fillOval(10,10,100,100);
    }


    @Override
    public void windowOpened(WindowEvent e) {
        System.out.println("窗口被打开");
    }

    @Override
    public void windowClosing(WindowEvent e) {  //右上角的按钮

        System.out.println("窗口已经被关闭---------");
        System.exit(0);
    }

    @Override
    public void windowClosed(WindowEvent e) {  //
      
    }

    @Override
    public void windowIconified(WindowEvent e) {
        System.out.println("窗口从正常状态转换为最小化");
    }

    @Override
    public void windowDeiconified(WindowEvent e) {
        System.out.println("窗口从最小化转换为正常状态");
    }

    @Override
    public void windowActivated(WindowEvent e) {
        System.out.println("窗口设置为活动窗口");
    }

    @Override
    public void windowDeactivated(WindowEvent e) {
        System.out.println("窗口已经不是活动窗口");
    }
}

import java.awt.*;
public class hello {
    public static void main(String []avgs){
        Frame f=new Frame("小球移动八个方向");
        f.setSize(900,900);
        f.setLocationRelativeTo(null);
        panel p=new panel();
        f.add(p);
       f.addWindowListener(p);
        f.setVisible(true);
    }
}

(四)、综合测试:打字幕游戏

import java.awt.*;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
class panel extends Panel implements Runnable, KeyListener {
    int sum=0;
    String []s=new String[]{"a","b","c","d","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
    int []x=new int[500];
    int []y=new int[550];
//对数组进行自定义初始化
    public panel(){//初始化数组
        for(int i=0;i<10;i++){
            Random r=new Random();
            int m1=r.nextInt(461)+1;
            x[i]=m1;
        }
        for(int i=0;i<10;i++){
            Random r=new Random();
            int m2=r.nextInt(483)+1;
            y[i]=m2;
        }
        for(int i=0;i<10;i++){
            Random r=new Random();
            int idex=r.nextInt(25);
            s[i]=s[idex];
        }
    }
    //进行绘画的操作
    public void paint(Graphics g){
        int m=0;
        Color c=new Color(255,0,0);
        g.setColor(c);
        Font f=new Font("黑体",1,30);
        g.setFont(f);

        while (m++<10){
            g.drawString(s[m],x[m],y[m]);
        }
        g.fillRect(0,0,200,50);
        g.setColor(Color.BLACK);
        g.drawString("您得分为:"+sum,0,30);
    }
//进行移动的操作
    @Override
    public void run() {
        while (true){
            for(int i=0;i<10;i++){
                y[i]++;
                if(y[i]>=483){
                    Random r=new Random();
                        int m1=r.nextInt(461)+1;
                        x[i]=m1;
                    y[i]=0;
                        int idex=r.nextInt(25);
                        s[i]=s[idex];
                }
            }
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                System.out.println("错误");
                break;
            }repaint();
        }
    }
//进行删除的操作
    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {
        char keyc=e.getKeyChar();
        int NowHeight=-1;
        int NoeIdex=-1;
        Random r=new Random();
        for (int i = 0; i <10; i++) {
            if (keyc==s[i].charAt(0)){
                if(y[i]>NowHeight){  //进行求最大值  y坐标记录运行
                    NowHeight=y[i];
                    NoeIdex=i;
                }
                }
            }
        if(NoeIdex!=-1){
                y[NoeIdex]=0;
                int m1=r.nextInt(461)+1;
                int m2=r.nextInt(25);
                x[NoeIdex]=m1;
                s[NoeIdex]=s[m2];
                sum=sum+10;
        }
        }
    @Override
    public void keyReleased(KeyEvent e) {

    }
}

import java.awt.*;
public class hello {
    public static void main(String []avgs){
        Frame f=new Frame("小球移动八个方向");
        f.setSize(500,500);
        f.setLocationRelativeTo(null);
        panel p=new panel();
        Thread t=new Thread(p);
        t.start();
        f.add(p);
        f.addKeyListener(p);
        p.addKeyListener(p);
        f.setVisible(true);

    }
}

相关文章:

  • 【SCI期刊调研】
  • 【Dart 入门教程】(一) Dart 简介与安装
  • 十堰小程序开发,免费试用60天
  • 20220923_数据库过程_直销员计算语句
  • Mybatis知识总结一
  • 基于springboot校园疫情防控系统
  • mysql基于WebStorm服装购物网站的设计与实现毕业设计源码281444
  • 最长上升子序列(LIS)
  • 随州小程序开发,免费试用60天
  • 前端必读3.0:如何在 Angular 中使用SpreadJS实现导入和导出 Excel 文件
  • 【重识云原生】第六章容器6.3.7节——命令行工具kubectl
  • 求100到200的素数
  • Java面试宝典pdf整理
  • Python中的递归可选依赖
  • 前端Fetch API接收数据
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • centos安装java运行环境jdk+tomcat
  • ES6系列(二)变量的解构赋值
  • java正则表式的使用
  • mysql 5.6 原生Online DDL解析
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • node入门
  • oschina
  • Vue ES6 Jade Scss Webpack Gulp
  • 记一次删除Git记录中的大文件的过程
  • 前端
  • 使用 @font-face
  • python最赚钱的4个方向,你最心动的是哪个?
  • Semaphore
  • ​什么是bug?bug的源头在哪里?
  • # 数论-逆元
  • ###STL(标准模板库)
  • #NOIP 2014# day.2 T2 寻找道路
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (规划)24届春招和25届暑假实习路线准备规划
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (力扣)循环队列的实现与详解(C语言)
  • (一)appium-desktop定位元素原理
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转)详解PHP处理密码的几种方式
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .gitignore文件—git忽略文件
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net core 连接数据库,通过数据库生成Modell
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 的字符串暂存池
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • @Autowired注解的实现原理
  • @取消转义
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [Android] Implementation vs API dependency
  • [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型