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);}@Overridepublic void keyTyped(KeyEvent e1) {}@Overridepublic void keyPressed(KeyEvent e) {System.out.println("您按下了:"+e.getKeyChar()); //按下的字符System.out.println("按下的是:"+e.getKeyCode()); //按下的ascll码}@Overridepublic 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);}@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic 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();}@Overridepublic 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++;}@Overridepublic 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();}@Overridepublic void mousePressed(MouseEvent e) {System.out.println("鼠标被按下:");}@Overridepublic void mouseReleased(MouseEvent e) {System.out.println("鼠标被松开");}@Overridepublic void mouseEntered(MouseEvent e) {System.out.println("----------鼠标进入框体--------");}@Overridepublic 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);}@Overridepublic void mouseDragged(MouseEvent e) { //鼠标按下并拖动
// x=e.getX();
// y=e.getY();
// repaint();}@Overridepublic 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);}@Overridepublic void windowOpened(WindowEvent e) {System.out.println("窗口被打开");}@Overridepublic void windowClosing(WindowEvent e) { //右上角的按钮System.out.println("窗口已经被关闭---------");System.exit(0);}@Overridepublic void windowClosed(WindowEvent e) { //}@Overridepublic void windowIconified(WindowEvent e) {System.out.println("窗口从正常状态转换为最小化");}@Overridepublic void windowDeiconified(WindowEvent e) {System.out.println("窗口从最小化转换为正常状态");}@Overridepublic void windowActivated(WindowEvent e) {System.out.println("窗口设置为活动窗口");}@Overridepublic 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);}
//进行移动的操作@Overridepublic 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();}}
//进行删除的操作@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic 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;}}@Overridepublic 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);}
}
57.【Java 接口】相关推荐
- Java接口和Java抽象类(转,原文已被删除)
1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...
- jmeter使用BeanShell Sampler测试自己写的java接口(一)
上次直接使用jmeter里面的FTPsampler没有连接成功 现在想着自己写java代码,通过jmeter进行调用进行连接测试实现并发 代码引文: http://www.cnblogs.com/ch ...
- 57 java编程思想 创建窗口和程序片 可视编程和Beans
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 57.j ...
- Java接口对Hadoop集群的操作
Java接口对Hadoop集群的操作 首先要有一个配置好的Hadoop集群 这里是我在SSM框架搭建的项目的测试类中实现的 一.windows下配置环境变量 下载文件并解压到C盘或者其他目录. 链接: ...
- 推荐一个 Java 接口快速开发框架
欢迎关注方志朋的博客,回复"666"获面试宝典 今天给小伙伴们介绍一个Java接口快速开发框架-magic-api 简介 magic-api 是一个基于 Java 的接口快速开发框 ...
- java接口如何定义常量 c_在Java接口中怎样访问定义的常量呢?
java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能).那么我们在Java接口中怎 ...
- Java接口和Java抽象类
Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才是它们的最佳位置呢?把它们比较一下,你就可以发现了. 1.Java接口和Java抽象类最大的一个区别,就在于Java ...
- java接口深入理解,深入理解Java接口
从java接口是什么到为什么,理解java接口,主要解决三个问题 1.java接口是什么 2.java接口为什么 3.java接口怎么用 java接口是什么 接口是方法的抽象,通过接口规定类需要实现那 ...
- java安全接口调用_步骤3:调用Java接口
本文档主要介绍了通过调用Java接口生成工作密钥和进行通用数据加解密的操作方法. 整体流程 初始化SDK.具体内容请参见 配置Java接口.具体内容请参见 初始化SDK 使用以下方法初始化SDK.hs ...
- 对接第三方平台JAVA接口问题推送和解决
对接第三方平台JAVA接口问题推送和解决 参考文章: (1)对接第三方平台JAVA接口问题推送和解决 (2)https://www.cnblogs.com/CreateMyself/p/7295879 ...
最新文章
- 让 VAGRANT 启动并运行起来
- 第十六届全国大学智能车竞赛全国总决赛竞速组别成绩与奖项
- python详细安装教程3.8-python3.8下载及安装步骤详解
- 噬血代码进不了游戏_玩家认可,二次元魂类游戏,《噬血代码》在三个方面做出了差异化...
- Coursera课程Python for everyone:Quiz: Many-to-Many Relationships and Python
- TP框架中的A方法和R方法
- 瞎学的几天 ----java多线程和线程池
- PyTorch学习—22.PyTorch中常见报错
- [2019沈阳网络赛D题]Dawn-K's water(点分治)
- CSS 布局 - 水平 amp;amp; 垂直对齐,全面的水平垂直居中方案
- Spring Boot和Dubbo整合
- 支付宝客户端java版_支付宝对接支付-JAVA版
- sqlite3 判断数据库和表的状态
- 简述对互联网产品经理的认识
- 【九天教您南方cass 9.1】 14 坐标数据的纠正
- 怎么学习PLC技术?
- Flask-MDict搭建在线Mdict词典服务
- 关于职业规划的座谈会
- 研究方法|用CiteSpace进行科学文献可视化分析
- xp计算机用户名和密码忘记了怎么办,XP系统开机密码忘记了怎么办?