57.【Java 接口】

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

    }
}

猜你喜欢

转载自blog.csdn.net/qq_69683957/article/details/126863810
今日推荐