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();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值