GUI编程基础学习(七)——动作事件、鼠标事件、键盘事件

动作事件处理

动作事件由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
	}

}

运行效果:

猜你喜欢

转载自blog.csdn.net/A1344714150/article/details/86482638