10.4事件处理

任何支持GUI的操作环境都要不断地监视按键或点击鼠标这样的事件。这些事件在报告给正在与逆行的程序,每个程序将决定如何对这些事件做出响应。

10.4.1基本事件处理概念

  1. 在java AWT中,事件源(如 按钮,滚动条)有一些方法,允许你注册时间监听器,对这些事件做出所需的响应
  2. 通知一个事件监听器发生了某件事件时,这个事件的相关信息会封装在一个事件对象中,在Java中,所有的事件对象最终都派生于Java.util.EventObject类。当然每个事件类型还有子类,例如,ActionEvent,WindowEvent
  3. 不同的事件源可以产生不同的类型的事件,例如:按钮可以发送一个ActionEvent对象,而窗口会发送WindowEvent对象

AWT事件处理机制的概要说明:

1.事件监听器是一个实现了监听器接口的类实例
2.事件源对象能够注册监听器对象并向其发送事件对象
3.当事件发生时,事件源将事件对象发送给所有注册的监听器
4.监听器对象再使用事件对象中的信息决定如何对事件做出响应

下面是指定监听器的一个示例:

ActionListener listener=...;
var button=new JButton("按钮名称");
button.addActionListener(listener);
  • 现在,只要按钮产生了一个“动作事件”,listener对象就会得到通知。对于按钮来说,动作事件就是点击按钮
  • 要实现ActionListener接口,监听器就要实现一个名为actionPerformed的方法,该方法接受一个ActionEvent 对象做参数
  • 只要用户点击按钮,JButton对象就会创建一个ActionEvent对象,然后调用listen.actionPerformed(event),并传入这个事件对象
  • 一个事件源可以有多个监听器,按钮就会调用所有监听器的actionPerformed方法

10.4.2 实例:处理按钮点击事件
在这个示例中,我们想要在一个面板放置三个按钮,另外添加三个监听器作为这些按钮的监听器

class ButtonFrame extends JFrame
{
    private JPanel buttonPanel;
    public static final int DEFAULT_WIDTH = 300;
    public static final int DEFAULT_HEIGHT = 200;

    public ButtonFrame() throws HeadlessException {
    
        setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
        
        //creatButtons
        var yelloButton = new JButton("Yello");
        var blueButton = new JButton("Blue");
        var redButton = new JButton("Red");
        var exitButton = new JButton("Exit");

        buttonPanel = new JPanel();


        //add buttons to panel
        buttonPanel.add(yelloButton);
        buttonPanel.add(blueButton);
        buttonPanel.add(redButton);
        buttonPanel.add(exitButton);

        //add panel to frame
        add(buttonPanel);

        //create button actions
        var yelloAction=new ColorAction(Color.YELLOW);
        var blueAction=new ColorAction(Color.BLUE);
        var redAction=new ColorAction(Color.RED);


        //associate actions with buttons
        yelloButton.addActionListener(yelloAction);
        blueButton.addActionListener(blueAction);
        redButton.addActionListener(redAction);


    }

    private class ColorAction  implements ActionListener {
        private Color background;

        public ColorAction() {
        }

        public ColorAction(Color background) {
            this.background = background;
        }

        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            buttonPanel.setBackground(background);
            
        }

    }

}

public void actionPerformed(ActionEvent event)
在所有的情况下使用ActionListener接口的方式都是一样的:
actionPerformed方法,将接受一个ActionEvent类型的对象作为参数,这个事件包含了所发生的事件相关信息

方法名 作用
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值