`

JavaSE17—GUI事件

阅读更多
JavaSE17—GUI事件处理机制

1. GUI事件
GUI事件处理机制是指在GUI控件中,添加的各种操作。事件处理机制是指GUI窗体与用户的交互。
事件:
用户对控件的一个操作
事件源:
发生事件的控件就是事件源。
事件处理器:
负责事件处理的方法。

事件监听器首先与控件建立关联,当控件受到外界作用时,空间就会产生一个相应的时间对象,并把此对象传给与之关联的事件处理器,事件处理器就会被启动并执行相关的代码来处理该事件。

事件监听器用于监听指定的事件类型。必须实现改接口编写自己的监听器实现类来处理时间,监听器类接收到事件后,将将拜托指定的方法来执行时间处理。

事件监听器接口中可能会定义多个方法,在实现适配器接口时就应该实现接口中的所有方法。
例如在键盘监听器接口KeyListener中

import java.util.EventListener;
public interface KeyListener extends EventListener{
public void keyTyped(KeyEvent e);
public void keyPressed(KeyEvent e);
public void keyReleased(KeyEvent e);
}
2. 动作事件
在Java中动作事件由ActionEvent类表示,与动作时间对应的时间处理接口为ActionListener接口。
当控件发生动作时间后,ActionListener接口中的方法会被自动调用,该接口只有一个方法actionPerformed(),下面以按钮动作事件为例:
1) 定义事件监听类
public class ActionDemo implements ActionListener{
public void actionPerformered(ActionEvent e){
}
}
2) 向事件源注册监听器对象
控件可以通过addActionListener()方法注册时间监听器。
button.addActionListener(ad);

ad为动作时间监听器接口对象。

实例:在窗体中添加关闭按钮,并为该按钮绑定单击事件,实现用户单击按钮,窗体关闭。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class ActionEventDemo extends JFrame {
	public ActionEventDemo(){
		super();
		getContentPane().setLayout(null);
		setBounds(100,100,238,124);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		final JPanel jPanel = new JPanel();
		jPanel.setLayout(null);
		jPanel.setBounds(0,0,232,90);
		getContentPane().add(jPanel);
		final JButton jb = new JButton();
		jb.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(final ActionEvent e){
				// TODO Auto-generated method stub
				System.exit(0);
			}
			
		});
		jb.setText("CLOSE ME");
		jb.setBounds(73,27,86,28);
		jPanel.add(jb);
		this.setVisible(true);
	}
	public static void main(String[] args){
		new ActionEventDemo();
	}
}
3. 窗体控制
窗体控制是指发生了窗口定义的WindowEvent窗口事件。窗口事件由WindowListener对象负责监听,可以使用addWindowListener()方法为窗口注册WindowListener对象,当特定窗口的状态(如最大化,最最小化,图标化)改变时,由控件生成此窗口事件,然后由WindowListener进行处理。

WindowListener接口提供了7个方法。
4. 鼠标操作
鼠标事件由MouseListener对象负责监听,可以使用addMouseListener()方法为控件注册MouseListener对象,只有为控件注册了MouseListener对象才可以接收到鼠标事件。
MouseListener接口提供了5个方法。

为控件添加鼠标事件的步骤:
1) 首先创建MouseListener对象
2) 调用addMouseListener()方法为控件注册MouseListener对象作为监听器。
3) 在控件上操作鼠标生成鼠标事件。
4) 执行MouseListener对象的方法,完成鼠标事件的处理。
实例:
在标签中添加鼠标事件,来跟踪鼠标的变化,使标签的现实内容与鼠标的变化相应。
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;


public class UseMouseEventFrame extends JFrame{
	public UseMouseEventFrame (){
		this.setTitle("UseMouseEventFrameDemo");
		getContentPane().setLayout(null);
		this.setBounds(100,100,325,204);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		final JLabel jl = new JLabel();
		jl.addMouseListener(new MouseAdapter(){
			public void mouseClicked(final MouseEvent arg0){
				jl.setText("onClick!");
			}
			public void mouseEntered(final MouseEvent arg0){
				jl.setText("Entered!");
			}
			public void mouseExited(final MouseEvent arg0){
				jl.setText("Exited!");
				
			}
			public void mousePressed(final MouseEvent arg0){
				jl.setText("Pressed!");
			}
			public void mouseReleased(final MouseEvent arg0){
				jl.setText("Released");
			}
		});
		jl.setOpaque(true);
		jl.setBackground(Color.GRAY);
		jl.setText("onListener");
		jl.setBounds(70,38,171,83);
		getContentPane().add(jl);
		this.setVisible(true);
	}
	public static void main(String[] args){
		new UseMouseEventFrame();
	}
}
5. 键盘控件事件
键盘事件监听器由KeyListener()接口定义,编写键盘事件监听器必须实现该接口中的3个方法。
实现键盘事件处理步骤:
1) 首先创建KeyListenr对象
2) 调用addKeyListener()方法为控件注册KeyListener对象作为监听器。
3) 操作键盘生成键盘事件
4) 执行KeyListener对象的方法,完成键盘事件的处理。
实例:实现添加不规则按钮,并在该按钮中添加键盘事件,实现当用户按上下左右时,按钮的位置也随着变化。

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class KeyDemo extends JFrame{
	public KeyDemo(){
		super();
		this.getContentPane().setLayout(null);
		this.setBounds(100,100,257,160);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		final JPanel jp = new JPanel();
		jp.setLayout(null);
		jp.setBounds(0,0,249,126);
		this.getContentPane().add(jp);
		final JButton jb = new JButton();
		jb.addKeyListener(new KeyListener(){
			
			
			@Override
			public void keyPressed(KeyEvent e) {
				// TODO Auto-generated method stub
				String dir = KeyEvent.getKeyText(e.getKeyCode());
				int x = jb.getX();
				int y = jb.getY();
				if(dir.equals("Right")){
					x+=2;
				}
				if(dir.equals("Left")){
					x-=2;
				}
				if(dir.equals("Down")){
					y+=2;
				}if(dir.equals("Up")){
					y-=2;
				}
				jb.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
				
			}
			
		});
		jb.setContentAreaFilled(false);
		jb.setBorder(null);
		URL url = getClass().getResource("pig.png");
		ImageIcon icon = new ImageIcon(url);
		jb.setIcon(icon);
		jb.setBounds(45,48,40,39);
		jp.add(jb);
		this.setVisible(true);
	}
	public static void main(String[] args){
		new KeyDemo();
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics