一、事件
??? Java的事件和其他很多语言的事件非常相似。在上个学期,我学习了ActionScript3.0,一开始的时候,对于事件监听器这一类特别不理解。觉得“监听器”这个词特别陌生。
??? 随着深入的学习和了解,并进行了许多实践后,我渐渐地将程序与生活联系到了一起。在谍战片中充满了监听器的场景,我们不难想象:监听器进行监听的事件源,就是声波。事件,就是声音。当监听器监听到声音后,就启动了录制这功能。类似的,在AS3.0还有Java中,监听器(Listener)就是添加到事件源上的对象,绑定了对象的接口。当监听器监听到像鼠标点击这一类事件时,就会调用相应的方法来实现程序功能。
???????下面我来简单介绍一下Java的事件机制。
?
【Java事件机制】
?1.事件源
Q:有哪些可以成为事件源?
A:所有的图形界面控件(容器,元素),你的动作发生在哪一个控件上,那么该控件就是事件源对象。
???
2.事件监听器方法
?? 就是用来监听不同的动作的发生,当相应监听器方法监听到动作后,会自动调用相应的事件接口或事件抽象类的对象进行处理。
?? addActionListener(ActionListener l)??? ??? ??? 监听器类似按钮控件的点击操作,类似输入框控件的回车操作
?? addMouseListener(MouseListener ml)??? ??? 监听鼠标的进入,离开,按下,释放和单击操作
?? addMouseMotionListener(MouseMotionList ll);??? ??????? 监听鼠标的拖动和移动操作
?? addKeyListener(KeyListener kl)??? ??? ??? ? ??? 监听键盘的按下和释放操作
???
3.事件接口或者事件抽象类
?? 事件接口或者事件抽象类就是当事件监听器方法监听到动作之后,会调用事件接口或者事件抽象类。我们常常需要定义一个类实现接口或者抽象类。
举个例子:
class="java" name="code">/** * SortFrame,该类继承自JFrame * @author LucyWong * */ public class SortFrame extends javax.swing.JFrame{ //创建SortListener类对象,将每次排序结果传过来 SortListener sl = new SortListener(); public static void main(String[] args) { SortFrame sf = new SortFrame(); sf.initUI(); } public void initUI(){ //设置窗体属性 this.setTitle("2048"); this.setSize(800,600); //this.getContentPane().setBackground(new Color(198,180,138)); this.getContentPane().setBackground(new Color(153,217,220)); this.setLocationRelativeTo(null); this.setResizable(false); this.setDefaultCloseOperation(3); this.setLayout(null); this.setVisible(true); //取得窗体的画笔 Graphics g = this.getGraphics(); //实例化两个JButton类对象 JButton jbu1 = new JButton("希尔排序"); JButton jbu2 = new JButton("快速排序"); JButton jbu3 = new JButton("SORT SHELL"); JButton jbu4 = new JButton("SORT QUICK"); //设置JButton对象属性 jbu1.setBounds(280,100,100,30); jbu2.setBounds(420,100,100,30); jbu3.setBounds(280,150,100,30); jbu4.setBounds(420,150,100,30); //给事件源添加鼠标监听器方法,绑定事件接口对象 jbu1.addActionListener(sl); jbu2.addActionListener(sl); jbu3.addActionListener(sl); jbu4.addActionListener(sl); //将窗体的画笔传入到SortListener对象中 sl.setGraphics(g); //在窗体上添加JButton组件 this.add(jbu1); this.add(jbu2); this.add(jbu3); this.add(jbu4); } /** * 重写JFrame绘制容器的方法 */ public void paint(Graphics g){ super.paint(g); for(int i=0;i<5;i++){ g.setColor(new Color(217,206,176)); //绘制背景 g.fillRoundRect(80+i*130, 240, 120, 120, 15, 15); } } }
?
实例化接口:
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; /** * 事件处理类SortListener,该类要实现ActionListener * @author LucyWong * */ public class SortListener implements java.awt.event.ActionListener{ private static int[] a = {5,2,10,65,45}; //声明一个Graphics类的对象属性 private Graphics g; //记录鼠标点击时已排序的次数 private int click = 0; //创建一个二维数组,用于存储每次排序的结果 public int [][] temp = new int [24][5]; //创建Sort排序方法类对象 Sort sort = new Sort(); //传入画笔的方法 public void setGraphics(Graphics g){ this.g = g; } /** * 重写方法 */ public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); //判断 if(cmd.equals("希尔排序")){ for(int i=0;i<5;i++){ //重置颜色 g.setColor(new Color(217,206,176)); //绘制背景 g.fillRoundRect(80+i*130, 240, 120, 120, 15, 15); } //重置click click = 0; //调用Sort对象sort的希尔排序方法 sort.sf(); this.temp = sort.b; for(int j=0;j<temp[0].length;j++){ g.setColor(Color.WHITE); g.setFont(new Font("Arial",Font.BOLD,50)); //显示原始数列 g.drawString(temp[click][j]+" ", 130+j*120, 315); } }else if(cmd.equals("快速排序")){ for(int i=0;i<5;i++){ //重置颜色 g.setColor(new Color(217,206,176)); //绘制背景 g.fillRoundRect(80+i*130, 240, 120, 120, 15, 15); } //重置click click = 0; //调用Sort对象sort的希尔排序方法 sort.quickSort(a,0,4); this.temp = sort.b; for(int j=0;j<temp[0].length;j++){ g.setColor(Color.WHITE); g.setFont(new Font("Arial",Font.BOLD,50)); //显示原始数列 g.drawString(temp[click][j]+" ", 130+j*120, 315); } }else if(cmd.equals("SORT SHELL")){ for(int i=0;i<5;i++){ g.setColor(new Color(217,206,176)); //绘制背景 g.fillRoundRect(80+i*130, 240, 120, 120, 15, 15); } for(int j=0;j<temp[0].length;j++){ g.setColor(Color.WHITE); g.setFont(new Font("Arial",Font.BOLD,50)); //显示每次排序结果 g.drawString(temp[click+1][j]+" ", 130+j*120, 315); } //click值增加 click +=1; }else{ } } }
?在这个例子里面,就体现了事件的完整机制。SortListener实例化(implements)了ActionListener接口,并重写(Override)了接口的actionPerformed方法。
?
二、数组
?
Java的数组是引用对象,用new关键字来创建。
1.一维数组的声明方式:
? ?数据类型? 数组名[ ];
?? 或数据类型 [ ]? 数组名;
??例如?int?array [];或?int [] array;
?
???在Java中,声明数组时不用指定其长度。
??
2.一维数组的创建方式:
?
? 数组名 = new ?数据类型? [数组长度];
??例如:array = new int [5];
?
3.二维数组的创建方式:
? ? 和一维数组的创建方式类似:
?
??? 数据类型? 数组名[ ][ ];? 或??? 数据类型 [ ][ ]? 数组名;
???? 例如?int?array [][];或?int [][] array;
?
4.数组对象方法
???数组对象唯一的方法为??对象名.length();???返回值为数组对象的长度。