-举一反三:为什么Java的事件处理机制如此设计?
- 案例:按钮点击,界面上打印“Hello”
import javax.swing.*;
import java.awt.event.*;
class Printer implements ActionListener{ //①实现监听接口
public void actionPerformed(ActionEvent e){ //②编写处理函数
System.out.println("Hello");
}
}
class MyFrame extends JFrame{
private JButton jbt = new JButton("按钮");
private JPanel jpl = new JPanel();
public MyFrame(){
this.add(jpl);
jpl.add(jbt);
jbt.addActionListener(new Printer()); //③绑定
this.setSize(300,400);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main (String[] args) {
new MyFrame();
}
}
ActionEvent代表什么?封装了事件发出者的信息
例:界面上两个按钮,点击,分别让界面改变不同颜色
package Test;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
class MyFrame extends JFrame implements ActionListener{//①实现监听接口
private JButton jbt = new JButton("按钮");
private JPanel jpl = new JPanel();
public MyFrame(){
this.add(jpl);
jpl.add(jbt);
jbt.addActionListener(this); //③绑定
this.setSize(300,400);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e){ //②编写处理函数
jpl.setBackground(Color.yellow);
}
public static void main (String[] args) {
new MyFrame();
}
}
总结:①实现监听接口;②编写处理函数;③绑定
————以上叫做事件监听机制——————
***** ActionListener:按钮单击;文本框回车;菜单单击;其他拥有addActionListener函数的控件(见文档)
*AdjustmentListener:主要用于类似滚动条等调整功能的控件
*FocusListener:主要用于控件获得/失去焦点时响应事件
***ItemListener:用于选项有变化时响应事件(如下拉菜单等)
****MouseListener:监听鼠标事件(点击,进入/退出控件区域等)
****MouseMotionListener:监听鼠标事件(移动拖动)
鼠标在界面上移动,界面标题实时变为鼠标当前坐标值
****KeyListener:监听键盘事件
案例:一个按钮是黄色,另一个按钮是蓝色
package Test;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
class MyFrame extends JFrame implements ActionListener{//①实现监听接口
private JButton jbt1 = new JButton("按钮1");
private JButton jbt2 = new JButton("按钮2");
private JPanel jpl = new JPanel();
public MyFrame(){
this.add(jpl);
jpl.add(jbt1); jpl.add(jbt2);
jbt1.addActionListener(this); //③绑定
jbt2.addActionListener(this);
this.setSize(300,400);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e){ //②编写处理函数
if(e.getSource()==jbt1){
jpl.setBackground(Color.yellow);
}else{
jpl.setBackground(Color.blue);
}
}
public static void main (String[] args) {
new MyFrame();
}
}
案例:可选列表换颜色
package Test;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
class MyFrame extends JFrame implements ItemListener{
private JComboBox jcb = new JComboBox();
private JPanel jpl = new JPanel();
public MyFrame(){
jcb.addItemListener(this);
this.add(jpl);
jpl.add(jcb);
jcb.addItem("红");
jcb.addItem("绿");
jcb.addItem("蓝");
this.setSize(300,400);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
public void itemStateChanged(ItemEvent e){
String str = (String)jcb.getSelectedItem();
if(str.equals("红")){
jpl.setBackground(Color.red);
}else if(str.equals("绿")){
jpl.setBackground(Color.green);
}else{
jpl.setBackground(Color.blue);
}
}
public static void main (String[] args) {
new MyFrame();
}
}
案例:自动变色
package Test;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
class MyFrame extends JFrame implements MouseListener {
private JPanel jpl = new JPanel();
public MyFrame(){
this.add(jpl);
this.addMouseListener(this);
this.setSize(300,400);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e) {
jpl.setBackground(Color.red);
}
public void mouseExited(MouseEvent e) {
jpl.setBackground(Color.blue);
}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public static void main (String[] args) {
new MyFrame();
}
}
总结:
1、Java事件监听机制:三步骤
①实现监听接口;②编写处理函数;③绑定
2、事件监听机制原理
3、Java常见事件监听(举一反三)