动作事件处理
动作事件由ActionEvent类定义,最常用的是点击按钮后产生动作事件,可以通过实现ActionListener接口处理相应的动作事件;
ActionListener接口只有一个抽象方法,将在动作发生后触发,ActionListener接口的具体定义如下:
public interface ActionListener extends EventListener{
public void actionPerformed(ActionEvent e);
}
实现接口ActionListener的类必须给出抽象方法actionPerformed()的方法体;
案例:点击颜色按钮,改变背景颜色
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Client extends JFrame implements ActionListener{
JPanel centerPanel = new JPanel();
JPanel bottomPanel = new JPanel();
JButton blueButton = new JButton("蓝");
JButton redButton = new JButton("红");
public Client(){
setTitle("动作事件案例");
Container container = this.getContentPane();//获取窗体内置面板
container.setLayout(new BorderLayout());//设置边界布局
centerPanel.setPreferredSize(new Dimension(320,240));//设置面板大小
bottomPanel.setLayout(new FlowLayout());//设置流布局
blueButton.addActionListener(this);//添加监听
redButton.addActionListener(this);//添加监听
bottomPanel.add(blueButton);//向面板中添加按钮
bottomPanel.add(redButton);
container.add(centerPanel,BorderLayout.CENTER);//将面板添加进窗体内置面板
container.add(bottomPanel,BorderLayout.SOUTH);
pack();//窗体大小自适应
setVisible(true);//展示窗体
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//当用户点击窗体右上角x时自动推出程序
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==blueButton){//如果点击的是蓝按钮
centerPanel.setBackground(Color.BLUE);//设置中心面板背景颜色
}else{
centerPanel.setBackground(Color.RED);
}
}
public static void main(String[] args) {
new Client();
}
}
鼠标事件处理
鼠标事件由MouseEvent类捕获,可以通过实现MouseListener接口处理相应的鼠标事件;
MouseListener接口有5个抽象方法,分别在光标移入、移出、鼠标按键按下、鼠标按键释放、单击事件时触发;
需要注意的是,如果按键时在移出组件后被释放,则不会触发单击事件;
MouseListener接口具体定义如下:
public interface MouseListener extends EventListener{
//光标移入组件触发
public void mouseEntered(MouseEvent e);
//鼠标按键按下时触发
public void mousePressed(MouseEvent e);
//鼠标按键释放时触发
public void mouseReleased(MouseEvent e);
//发生单击事件时触发
public void mouseClicked(MouseEvent e);
//光标移处组件触发
public void mouseExited(MouseEvent e);
}
MouseEvent类常用方法:
①getSource():获得此次鼠标事件的组件对象
②getButton():获得鼠标被按下的键位,1表示鼠标左键,2表示鼠标滚轮,3表示鼠标右键
③getClickCount():获得单击按键的次数
案例:发生鼠标事件时,控制台输出相应语句
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
public class Client extends JFrame implements MouseListener{
JPanel panel = new JPanel();
public Client(){
setTitle("鼠标事件案例");//设置窗体标题
panel.setPreferredSize(new Dimension(320,240));//设置面板大小
panel.addMouseListener(this);//添加监听
this.getContentPane().add(panel);//向内置面板中添加面板
pack();//窗体大小自适应
setVisible(true);//展示窗体
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//当用户点击窗体右上角x时自动推出程序
}
public static void main(String[] args) {
new Client();
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标单击事件");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("光标移进了面板");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("光标移出了面板");
}
@Override
public void mousePressed(MouseEvent e) {
if(e.getButton()==1){
System.out.println("鼠标左键被按下");
}else if(e.getButton()==2){
System.out.println("鼠标滚轮被按下");
}else if(e.getButton()==3){
System.out.println("鼠标右键被按下");
}
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("鼠标按键被释放");
}
}
键盘事件处理
键盘事件由KeyEvent类捕获,可以通过实现KeyListener接口处理相应的键盘事件;
KeyListener接口有3个抽象方法,分别在发生击键事件、按键被按下和被释放时触发;
KeyListener接口的具体定义如下:
public interface KeyListener extends EventListener{
public void keyTyped(KeyEvent e);
public void keyPressed(KeyEvent e);
public void keyReleased(KeyEvent e);
}
KeyEvent类中比较常用的方法:
①getSource() :获得触发此次事件的组件对象
②getKeyChar():获得触发此次事件的键相关联的字符
③getKeyCode():获得触发此次事件的键相关联的整数keyCode
④getKeyText(int keyCode):获得描述keyCode的标签
⑤isActionKey():查看此事件是否为动作键
⑥isControlDown():查看ctrl键是否按下
⑦isAltDown():查看alt键是否按下
⑧isShiftDown():查看shift键是否按下
案例:按WASD或者上下左键方向键,操控"Hello World"标签的移动;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Client extends JFrame implements KeyListener{
JPanel panel = new JPanel();
JLabel label = new JLabel("Hello World");
public Client(){
setTitle("键盘事件案例");//设置窗体标题
label.setLocation(120, 220);//设置标签左上角的布局位置
panel.add(label);//向面板中添加标签
panel.setPreferredSize(new Dimension(320,240));//设置面板大小
panel.addKeyListener(this);//添加监听
panel.setFocusable(true);//将焦点设置在面板上
this.getContentPane().add(panel);//向内置面板中添加面板
pack();//窗体大小自适应
setVisible(true);//展示窗体
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//当用户点击窗体右上角x时自动推出程序
}
public static void main(String[] args) {
new Client();
}
@Override
public void keyPressed(KeyEvent e) {
int x = label.getLocation().x;//获取标签当前左上角坐标
int y = label.getLocation().y;
if(e.getKeyCode()==KeyEvent.VK_UP||e.getKeyCode()==KeyEvent.VK_W){
System.out.println("上");
x = label.getLocation().x;
y = label.getLocation().y-10;
}else if(e.getKeyCode()==KeyEvent.VK_DOWN||e.getKeyCode()==KeyEvent.VK_S){
System.out.println("下");
x = label.getLocation().x;
y = label.getLocation().y+10;
}else if(e.getKeyCode()==KeyEvent.VK_LEFT||e.getKeyCode()==KeyEvent.VK_A){
System.out.println("左");
x = label.getLocation().x-10;
y = label.getLocation().y;
}else if(e.getKeyCode()==KeyEvent.VK_RIGHT||e.getKeyCode()==KeyEvent.VK_D){
System.out.println("右");
x = label.getLocation().x+10;
y = label.getLocation().y;
}
label.setLocation(x, y);//设置标签位置
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
运行效果: