• Java学习笔记--AWT事件处理


    1.事件模型

    在整个事件触发和相应的过程中,主要涉及一下3类对象

    (1) 事件源 : 引起时间的GUI对象,如各类组件(Button,Label,TextField),容器组件(Frame,panel,ScrallPane等)

    (2) 事件类 : 事件类是引发的GUI时间封装成的类,如鼠标事件 MouseEvent

    (3) 事件处理器 : 接收事件类

    1.1 事件类

     低级事件
      ComponentEvent( 组件事件:组件尺寸的变化,移动)
      ContainerEvent( 容器事件:组件增加,移动)
      WindowEvent( 窗口事件:关闭窗口,窗口闭合,图标化)
      FocusEvent( 焦点事件:焦点的获得和丢失)
      KeyEvent( 键盘事件:键按下、释放)
      MouseEvent( 鼠标事件:鼠标单击,移动)
     高级事件(语义事件)
      ActionEvent(动作事件:按钮按下,TextField中按Enter键)
      AdjustmentEvent(调节事件:在滚动条上移动滑块以调节数值)
      ItemEvent(项目事件:选择项目,不选择"项目改变")
      TextEvent(文本事件,文本对象改变)

    1.2 事件处理器

    处理组件触发事件的方法成为“事件处理器”,事件处理器必须实现事件监听接口才能接收对应的事件类,每类事件都用对应的事件监听接口实现接口的事件处理器来接收对应的事件类。

    1.3注册事件处理器

    在组件中注册该组件将引发时间类对应的事件处理器,如按钮的单击事件可以用行为事件类(ActionEvent)来封装,也可用MouseEvent。在按钮组件中注册该ActionEvent事件的处理器,使用addActionListener方法:

    Button a = new Button("a");

    a.addActionListener(new actionHandler());

    常用事件处理器注册方法:

    (1)addActionListener(), 可用于Button以及TextField等具有行为操作的组件

    (2)addAdjustmentListener() 可用于ScrollBar等具有滚动操作的组件

    (3)addFocusListener()  可用于具有焦点操作的组件

    (4)addItemListener()  可用于CheckBox ComboBox等具有项选择操作的组件

    (5)addKeyListener()  可用于具有键盘输入操作的组件

    (6)addMouseListener()  可用于具有鼠标操作的组件

    (7)addWindowListener()  可用于窗体操作的组件

    2.事件处理器

    所有AWT事件及其相应的监听器接口,一共10类事件,11个接口

    事件类别
    描述信息
    接口名
    方法
     ActionEvent 激活组件   ActionListener  actionPerformed(ActionEvent)
     ItemEvent 选择了某些项目   ItemListener  itemStateChanged(ItemEvent)
     MouseEvent 鼠标移动   MouseMotionListener  mouseDragged(MouseEvent)
     mouseMoved(MouseEvent)
    鼠标点击等   MouseListener  mousePressed(MouseEvent)
     mouseReleased(MouseEvent)
     mouseEntered(MouseEvent)
     mouseExited(MouseEvent)
     mouseClicked(MouseEvent)
     KeyEvent 键盘输入   KeyListener  keyPressed(KeyEvent)
     keyReleased(KeyEvent)
     keyTyped(KeyEvent)
     FocusEvent 组件收到或失去焦点   FocusListener  focusGained(FocusEvent)
     focusLost(FocusEvent)
    AdjustmentEvent 移动了滚动条等组件   AdjustmentListener  adjustmentValueChanged(AdjustmentEvent)
     ComponentEvent 对象移动缩放显示隐藏等   ComponentListener  componentMoved(ComponentEvent)
     componentHidden(ComponentEvent)
     componentResized(ComponentEvent)
     componentShown(ComponentEvent)
     WindowEvent 窗口收到窗口级事件   WindowListener  windowClosing(WindowEvent)
     windowOpened(WindowEvent)
     windowIconified(WindowEvent)
     windowDeiconified(WindowEvent)
     windowClosed(WindowEvent)
     windowActivated(WindowEvent)
     windowDeactivated(WindowEvent)
     ContainerEvent 容器中增加删除了组件   ContainerListener  componentAdded(ContainerEvent)
     componentRemoved(ContainerEvent)
     TextEvent 文本字段或文本区发生改变   TextListener  textValueChanged(TextEvent)
    一些例子:
    eg 1  点击确定按钮弹出新窗口
    public class ClickEvent {
    	  public static void main(String[] args) {
    		  Frame frame = new Frame("Frame 窗体");
    		  frame.setLayout(new GridLayout(1,2));
    		  
    		  Button b1 = new Button("确定");
    		  Button b2 = new Button("取消");
    		  frame.add(b1);
    		  frame.add(b2);
    		  frame.pack();//窗口设置为最佳大小
    		  b1.addActionListener(new MyClickListener());
    		  b2.addActionListener(new MyClickListener());
    		  frame.setVisible(true);
    	  }
    }
    
    class MyClickListener implements ActionListener{
    	public void  actionPerformed(ActionEvent e){
    		if(e.getActionCommand().equals("确定")){
    			Frame newWindow = new Frame("新窗口");
    			newWindow.setSize(100,100);
    			newWindow.setVisible(true);
    		}else{
    			System.exit(0);
    		}
    		
    	}
    }
    

    eg 2 拖动鼠标在控制台显示鼠标轨迹坐标,点击鼠标左键在控制台显示点击坐标

    public class EventListener {
    
    
    	EventListener(){
    		Frame frame = new Frame("Frame 窗体");
    		frame.setSize(200,200);
    		frame.addMouseListener(new MyMouseListener());
    		frame.addMouseMotionListener(new MouseMotionListener(){
    			public void mouseDragged(MouseEvent e){
    				System.out.println("拖动鼠标,当前位置:"+e.getX()+","+e.getY());
    			}
    			public void mouseMoved(MouseEvent e){
    				
    			}
    		});
    		frame.setVisible(true);
    	}
    	
    	public static void main(String[] args) {
    		/*Frame frame = new Frame("Frame 窗体");
    		frame.setSize(200,200);
    		frame.addMouseListener(new MyMouseListener());
    		frame.setVisible(true);*/
    		new  EventListener();
    
    	}
    
    }
    
    //用接口有一个缺点:所有方法必须实现
    class MyMouseListener implements MouseListener{
    	public void mouseClicked(MouseEvent e){
    		System.out.println("鼠标当前位置:"+e.getX()+","+e.getY());
    	}
    	
    	public void mousePressed(MouseEvent e){
    	}
    	public void mouseReleased(MouseEvent e){
    	}
    	public void mouseExited(MouseEvent e){
    	}
    	public void mouseEntered(MouseEvent arg0) {
    	}
    }
    

     

    eg 3 在文本框显示按下的键盘键

    public class KeyAdapterCls {
    	
    
    	public static void main(String[] args) {
    		Frame frame = new Frame("Frame窗体");
    		frame.setLayout(new GridLayout(2,1));
    		Button btn = new Button("请按下键盘");
    		final TextField txt;
    		txt = new TextField();
    		btn.addKeyListener(new KeyListener(){
    			public void keyPressed(KeyEvent e){
    				txt.setText(txt.getText() + e.getKeyChar());
    			}
    			public void keyReleased(KeyEvent e){}
    			public void keyTyped(KeyEvent e){}
    		});
    		
    		frame.addWindowListener(new WindowAdapter(){
    			public void windowClosing(WindowEvent e){
    				System.exit(0);
    			}
    		});
    		
    		frame.add(btn);
    		frame.add(txt);
    		frame.setSize(400,200);
    		frame.setVisible(true);
    	}
    
    }
    

      

  • 相关阅读:
    HDU 2023题解分析
    Java中常见的几种类型转换
    Software Version --hdu1976
    单词数
    Usaco 2.3 Zero Sums(回溯DFS)--暴搜
    9的余数
    mongodb学习(一)
    svg学习(九)path
    svg学习(八)polyline
    qunit学习(一)
  • 原文地址:https://www.cnblogs.com/gnivor/p/4245993.html
Copyright © 2020-2023  润新知