事件处理

事件处理的一般方法:
1.创建将要产生事件的组件对象
2.构造实现相应事件监听器接口的类,并创建事件监听器对象
3.为组件对象增加事件监听器对象:组件对象.addXxxListener(事件监听器对象);如:button.addActionListener(this);

注:接口中的方法都含有所产生的事件对象参数,使用该参数的getSource()方法可以得到产生该事件的事件源

ActionListener

动作事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package Swing_Exception;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
public class Exception_2 {
JFrame f;
JButton b;
public Exception_2() {
f=new JFrame("匿名内部类");
b=new JButton("我是按钮,请点击");
b.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
b.setText("我被点击了");
}

});
f.add(b);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
new Exception_2();
}

}

ItemListener

选择监听

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package Swing_Exception;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.*;
public class ItemEvent_1 {
JFrame f;
JComboBox xlk;//下拉框
JTextArea t;
JScrollPane gd;
String str[]= {"选项一","选项二","选项三","选项四","选项五"};
public ItemEvent_1(){
f=new JFrame();
xlk=new JComboBox(str);
t=new JTextArea(5,3);
gd=new JScrollPane(t);
xlk.addItemListener(new ItemListener() {

@Override
public void itemStateChanged(ItemEvent e) {
// TODO 自动生成的方法存根
int stateChange=e.getStateChange();//获得事件类型
String item=e.getItem().toString();//获得触发此次事件的选项
if(stateChange==ItemEvent.SELECTED) { //查看是否由选中选项触发
System.out.println("此次事件由 选中 选项 “"+item+"”触发!");
t.append("此次事件由 选中 选项 “"+item+"”触发!"+"\n");
}else if(stateChange==ItemEvent.DESELECTED) { //查看是否由取消选中选项触发
System.out.println("此次事件由 取消选中 选项 “"+item+"”触发!");
t.append("此次事件由 取消选中 选项 “"+item+"”触发!"+"\n");
}else { //由其他原因触发
System.out.println("此次事件由其他原因触发!"+"\n");
t.append("此次事件由其他原因触发!");

}
}

});
f.add(xlk,BorderLayout.NORTH);
f.add(gd,BorderLayout.CENTER);
f.setSize(300,400);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
new ItemEvent_1() ;
}

}

KeyListener

键盘事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package Swing_Exception;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.*;
public class KeyColor_1 {
JFrame f;
JButton b1,b2,b3,b4,b5,b6,b7;
JLabel l;
public KeyColor_1() {
f=new JFrame("颜色");
b1=new JButton("1");
b1.setBackground(Color.WHITE);
b2=new JButton("2");
b2.setBackground(Color.WHITE);
b3=new JButton("3");
b3.setBackground(Color.WHITE);
b4=new JButton("4");
b4.setBackground(Color.WHITE);
b5=new JButton("5");
b5.setBackground(Color.WHITE);
b6=new JButton("6");
b6.setBackground(Color.WHITE);
b7=new JButton("7");
b7.setBackground(Color.WHITE);
l=new JLabel("英文键盘模式");
f.setLayout(new FlowLayout());
//f.setFocusable(true);//获得焦点
b1.addKeyListener(new KeyListener() { //b1为焦点

@Override
public void keyTyped(KeyEvent e) {
// TODO 自动生成的方法存根

}

@Override
public void keyPressed(KeyEvent e) { //按下
// TODO 自动生成的方法存根
switch((char)e.getKeyCode()) { //判断按下的键值
case KeyEvent.VK_1:
b1.setBackground(Color.red);
break;
case KeyEvent.VK_2:
b2.setBackground(Color.orange);
break;
case KeyEvent.VK_3:
b3.setBackground(Color.YELLOW);
break;
case KeyEvent.VK_4:
b4.setBackground(Color.green);
break;
case KeyEvent.VK_5:
b5.setBackground(Color.cyan);
break;
case KeyEvent.VK_6:
b6.setBackground(Color.blue);
break;
case KeyEvent.VK_7:
b7.setBackground(new Color(128,0,255));
break;
}
}

@Override
public void keyReleased(KeyEvent e) { //释放
// TODO 自动生成的方法存根
switch((char)e.getKeyCode()) {
case KeyEvent.VK_1:
b1.setBackground(Color.WHITE); //null为原来色体
break;
case KeyEvent.VK_2:
b2.setBackground(Color.WHITE);
break;
case KeyEvent.VK_3:
b3.setBackground(Color.white);
break;
case KeyEvent.VK_4:
b4.setBackground(Color.white);
break;
case KeyEvent.VK_5:
b5.setBackground(Color.white);
break;
case KeyEvent.VK_6:
b6.setBackground(Color.white);
break;
case KeyEvent.VK_7:
b7.setBackground(Color.white);
break;
}
}

});
f.add(b1);
f.add(b2);
f.add(b3);
f.add(b4);
f.add(b5);
f.add(b6);
f.add(b7);
f.add(l,BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
new KeyColor_1();
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package Swing_Exception;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.*;
public class KeyListener_1 {
JFrame f;
JLabel l;
JTextArea t;
JScrollPane gd;
public KeyListener_1() {
f=new JFrame("键盘事件");
l=new JLabel("请输入:");
t=new JTextArea(5,3);
t.addKeyListener(new KeyListener() {

@Override
public void keyPressed(KeyEvent e) { //键盘输入
// TODO 自动生成的方法存根
String keytext=KeyEvent.getKeyText(e.getKeyCode());//获得描述keycode的标签
if(e.isActionKey()) {
System.out.println("你按下的是动作键“"+keytext+"”");
}else {
System.out.println("你按下的是非动作键“"+keytext+"”");
//获得与此事件中的键相关联的字符
int keycode=e.getKeyCode();
switch(keycode) {
case KeyEvent.VK_CONTROL: //判断按下的是否为ctrl键
System.out.println(",Ctrl键被按下");
break;
case KeyEvent.VK_ALT: //判断是否为ait
System.out.println(",AIt键被按下");
break;
case KeyEvent.VK_SHIFT:
System.out.println(",Shift键被按下");
break;
}
System.out.println();
}
}

@Override
public void keyTyped(KeyEvent e) { //键盘按下
// TODO 自动生成的方法存根
//获得输入的字符
System.out.println("此次输入的是“"+e.getKeyChar()+"”");
}

@Override
public void keyReleased(KeyEvent e) { //键盘松开
// TODO 自动生成的方法存根
//获得描述Keycode的标签
String keyText=KeyEvent.getKeyText(e.getKeyCode());
System.out.println("你释放的是“"+keyText+"”键");
System.out.println();
}

});
t.setLineWrap(true);
gd=new JScrollPane(t);
f.add(l,BorderLayout.WEST);
f.add(gd,BorderLayout.CENTER);
f.setSize(400,400);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
new KeyListener_1();
}
}

MouseListener

鼠标事件
MouseListener接口中的方法:
① void mousePressed ( MouseEvent ); //鼠标被按下
② void mouseReleased ( MouseEvent ); //鼠标被释放
③ void mouseClicked ( MouseEvent ); //鼠标被单击
④ void mouseEntered ( MouseEvent ); //光标移入组件
⑤ void mouseExit ( MouseEvent ); //光标移出组件


MouseEvent中的常用方法:
1.int getButton();
返回更改了状态的鼠标按键(如果有)。
2.int getClickCount();
返回与此事件关联的鼠标单击次数。
3.boolean isAltDown();
返回Alt修饰符在此事件上是否为down。
4. boolean isControlDown();
返回Ctrl修饰符在此事件上是否为down。
5.boolean isShiftDown();
返回Shift修饰符在此事件上是否为down.
6.int getPoint();
返回事件相对于源组件的x,y坐标
7.int getX();
返回事件相对于源组件的水平x坐标。
8.int getY();
返回事件相对于源组件的垂直Y坐标。
9.int isPopupTrigger();
返回鼠标事件是否为该平台的弹出菜单所触发的事件。
10.MouseAdapter适配器


MouseMotionListener
1.当在组件上进行鼠标拖动、移动时产生该事件。
2.MouseMotionListener接口中的方法
① void mouseDragged( MouseEvent );
② void mouseMoved ( MouseEvent );
3.MouseMotionAdapter适配器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package Swing_Exception;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.*;
import javax.swing.*;
public class MouseEvent_1 {
JFrame f;
JLabel l;
public MouseEvent_1() {
f=new JFrame("鼠标事件");
l=new JLabel("鼠标测试处");
l.addMouseListener(new MouseListener() {

@Override//鼠标发送单机事件触发
public void mouseClicked(MouseEvent e) {
// TODO 自动生成的方法存根
System.out.println("单击了鼠标按键");
int i=e.getButton();//通过该值可以判断按下的是哪个键
if(i==MouseEvent.BUTTON1)
System.out.println("按下的是鼠标左键");
if(i==MouseEvent.BUTTON2)
System.out.println("按下的是鼠标滚轮");
if(i==MouseEvent.BUTTON3)
System.out.println("按下的是鼠标右键");
int Clickcount=e.getClickCount();//点击次数
System.out.println("点击次数为"+Clickcount+"下");
}

@Override//鼠标按键被按下时触发
public void mousePressed(MouseEvent e) {
// TODO 自动生成的方法存根
System.out.println("鼠标按键被按下");
int i=e.getButton();//通过该值可以判断按下的是哪个键
if(i==MouseEvent.BUTTON1)
System.out.println("按下的是鼠标左键");
if(i==MouseEvent.BUTTON2)
System.out.println("按下的是鼠标滚轮");
if(i==MouseEvent.BUTTON3)
System.out.println("按下的是鼠标右键");
}

@Override
public void mouseReleased(MouseEvent e) {
// TODO 自动生成的方法存根
//按下后松下
System.out.println("鼠标已释放");
}

@Override//光标移入组件被触发
public void mouseEntered(MouseEvent e) {
// TODO 自动生成的方法存根
System.out.println("光标移入组件");
l.setForeground(Color.red);
}

@Override
public void mouseExited(MouseEvent e) {
// TODO 自动生成的方法存根
System.out.println("光标移出组件");
l.setForeground(Color.black);
}

});
f.add(l);
f.pack();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
new MouseEvent_1();
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package Swing_Exception;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.*;
public class MyMouseMotionListener {
JFrame f;
JPanel p;
JButton b;
JTextArea t;
JScrollPane gd;
JLabel l;
int count=0;
public MyMouseMotionListener() {
f=new JFrame("MyMouseMotionListener");
l=new JLabel("clik and drag the mouse");
t=new JTextArea(10,10);
t.addMouseMotionListener(new MouseMotionListener() {

@Override
public void mouseDragged(MouseEvent e) {
// TODO 自动生成的方法存根
count++;
t.append(count+"The mouse is dragged:X="+e.getX()+"Y="+e.getY()+"\n");
}

@Override
public void mouseMoved(MouseEvent e) {
// TODO 自动生成的方法存根
count++;
t.append(count+"The mouse is moving:X="+e.getX()+"Y="+e.getY()+"\n");
}

});
b=new JButton("退出");
gd=new JScrollPane(t);
f.add(l,BorderLayout.NORTH);
f.add(gd,BorderLayout.CENTER);
f.add(b,BorderLayout.SOUTH);
f.setSize(600,600);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
new MyMouseMotionListener();
}

}

WindowListener

窗口监听

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package Swing_Exception;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;

import javax.swing.*;
public class WindowFocusListener_1 {
JFrame f;
JPanel p;
JTextArea t;
JLabel l;
JScrollPane gd;
public WindowFocusListener_1(){
f=new JFrame("窗口焦点测试");
p=new JPanel();
t=new JTextArea(5,3);
gd=new JScrollPane(t);
t.setLineWrap(true);//自动换行
l=new JLabel("测试区域");
l.setFont(new Font("宋体",Font.BOLD,50));
f.addWindowFocusListener(new WindowFocusListener() {

@Override
public void windowGainedFocus(WindowEvent e) {//获得焦点
// TODO 自动生成的方法存根
t.append("窗口获得焦点"+"\n");
System.out.println("\"窗口获得焦点\"");
}

@Override
public void windowLostFocus(WindowEvent e) { //失去焦点
// TODO 自动生成的方法存根
t.append("窗口失去焦点"+"\n");
System.out.println("\"窗口失去焦点\"");
}

});
p.add(l);
f.add(p,BorderLayout.CENTER);
f.add(gd,BorderLayout.SOUTH);
f.setSize(400,300);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
new WindowFocusListener_1();
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package Swing_Exception;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.*;
public class WindowListener_1 {
JFrame f;
JLabel l;
JTextArea t;
JScrollPane gd;
public WindowListener_1() {
f=new JFrame("窗口事件");
l=new JLabel("显示");
t=new JTextArea(5,3);
t.setLineWrap(true);
gd=new JScrollPane(t);
f.add(l,BorderLayout.NORTH);
f.add(gd,BorderLayout.CENTER);
f.addWindowListener(new WindowListener() {

@Override
public void windowOpened(WindowEvent e) { //窗口打开时触发
// TODO 自动生成的方法存根
System.out.println("窗口被打开");
t.append("窗口被打开");
}

@Override
public void windowClosing(WindowEvent e) { //窗口将要关闭时触发
// TODO 自动生成的方法存根
System.out.println("窗口将要被关闭");
t.append("窗口将要被关闭");
}

@Override
public void windowClosed(WindowEvent e) { //窗口已经被关闭时触发
// TODO 自动生成的方法存根
System.out.println("窗口已经被关闭");
t.append("窗口已经被关闭");
}

@Override
public void windowIconified(WindowEvent e) { //窗口最小化时触发
// TODO 自动生成的方法存根
System.out.println("窗口被最小化");
t.append("窗口已经被最小化");
}

@Override
public void windowDeiconified(WindowEvent e) { //窗口被非最小化时触发
// TODO 自动生成的方法存根
System.out.println("窗口被非最小化");
t.append("窗口已经被非最小化");
}

@Override
public void windowActivated(WindowEvent e) { //窗口被激活时触发
// TODO 自动生成的方法存根
System.out.println("窗口被激活");
t.append("窗口被激活");
}

@Override
public void windowDeactivated(WindowEvent e) { //窗口不再处于激活状态时触发
// TODO 自动生成的方法存根
System.out.println("窗口不再处于激活状态");
t.append("窗口不再处于激活状态");
}

});
f.setSize(300,400);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
new WindowListener_1();
}

}