A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张权 中级黑马   /  2013-3-20 18:08  /  2693 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张权 于 2013-3-20 18:42 编辑

/*
   需求: 创建一个窗体,在该窗体上添加一个按钮, 当点击按钮时, 会在控制台输出hello world
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test {
        public static void main(String[] args) {
                //创建一个窗体
                final JFrame f = new JFrame();
               //设置窗体大小
                f.setSize(300, 200);
              // 设置窗体位置
                f.setLocation(500, 300);
                  //设置布局管理器
                f.setLayout(new FlowLayout());
                //创建一个按钮
                JButton btn = new JButton("Submit");

              //上面的代码我都懂, 但是从这里开始, 不是很理解,望详细解释 ,我只知道下面的代码可以在单击按钮时, 可以在控制台上面打印出Hello world, 但是具体是怎么执行的却不清楚..         
                ActionListener listener = new MyAction();
                btn.addActionListener(listener);
                f.add(btn);
               
                f.setVisible(true);
        }
}

class MyAction implements ActionListener {
           //还有这里的形参evt接受的到底是什么???是怎样传递给evt的?
        public void actionPerformed(ActionEvent evt) {
                System.out.println("Hello world!");
        }
}

点评

如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-21 10:46

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 michaelchen 于 2013-3-20 19:47 编辑
  1. <FONT color=black>import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;

  4. public class Test {
  5.         public static void main(String[] args) {
  6.                 //创建一个窗体
  7.                 final JFrame f = new JFrame();
  8.                //设置窗体大小
  9.                 f.setSize(300, 200);
  10.               // 设置窗体位置
  11.                 f.setLocation(500, 300);
  12.                   //设置布局管理器
  13.                 f.setLayout(new FlowLayout());
  14.                 //创建一个按钮
  15.                 JButton btn = new JButton("Submit");

  16.               //上面的代码我都懂, 但是从这里开始, 不是很理解,望详细解释 ,我只知道下面的代码可以在单击按钮时, 可以在控制台上面打印出Hello world, 但是具体是怎么执行的却不清楚..         
  17.                 ActionListener listener = new MyAction();//<FONT color=red>通过MyAction类创建一个动作监听器</FONT>
  18.                btn.addActionListener(listener);//<FONT color=red>从此该动作监听器监听Button的动作
  19. </FONT>                f.add(btn);//<FONT color=red>将button添加到窗体上
  20. </FONT>              
  21.                 f.setVisible(true);//<FONT color=red>设置窗体可视</FONT>        
  22.     }
  23. }

  24. class MyAction implements ActionListener {
  25.            //还有这里的形参evt接受的到底是什么???是怎样传递给evt的?
  26.         public void actionPerformed(ActionEvent evt) {/*<FONT color=red>evt 指示发生了组件定义的动作的语义事件。当特定于组件的动作(比如被按下)发生时,
  27.                 由组件(比如 Button)生成此高级别事件。事件被传递给每一个 ActionListener 对象,
  28.                 这些对象是使用组件的 addActionListener 方法注册的,用以接收这类事件</FONT>.
  29.                 */
  30.                 System.out.println("Hello world!");
  31.         }
  32. }</FONT>
复制代码
希望能帮到楼主

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
我这样理解对吗?创建一个监听器,当监听器监听到事件后,就会把该事件传递给参数形参e, 然后就会调用监听器中的actionPerformed(ActionEVent e)方法, 不知道这么理解对不对?
回复 使用道具 举报
创建监听器对象:
ActionListener listener = new MyAction();
按钮上添加监听器,监听按钮事件
btn.addActionListener(listener);
窗体上添加按钮
f.add(btn);
--------------------------------------------
class MyAction implements ActionListener {
            //还有这里的形参evt接受的到底是什么???是怎样传递给evt的?
                  evt是事件,就是你按键盘或者点鼠标引发的这件事件,传递是有虚拟机来传递,不用管。
         public void actionPerformed(ActionEvent evt) {
                 System.out.println("Hello world!");
         }
}
其实我是这样理解的,
一个监听器就对应一个窗体,监听器中的方法对应窗体中的按钮,所以窗体的监听器方法比较多
当你添加按钮之类的小组件时,也要添加对应的监听器,一般这些监听器的方法只有1两个
有两个监听器比较特殊,就是鼠标和键盘,这两个监听器是所有组件通用的。
动作引发事件,监听器监听动作,接受事件,然后处理。
就好像脚踩地雷,你踩下地雷,地雷爆炸。地雷就有一个监听器监听你是否踩下去。
就好像打游戏中的触发式陷阱。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
黄基焜 发表于 2013-3-20 22:14
创建监听器对象:
ActionListener listener = new MyAction();
按钮上添加监听器,监听按钮事件

黄兄说的很清楚啊, 哈哈, 谢谢了, 原来我的理解并没错, 只是以前上课听的很模糊, 不确定自己理解的是否正确, 然后查API, 结果越看越糊涂....
回复 使用道具 举报
测试结果正常
  1. /*
  2.    需求: 创建一个窗体,在该窗体上添加一个按钮, 当点击按钮时, 会在控制台输出hello world
  3. */
  4. import java.awt.*;
  5. import java.awt.event.*;
  6. import javax.swing.*;

  7. public class Test {
  8.         public static void main(String[] args) {
  9.                 //创建一个窗体
  10.                 final JFrame f = new JFrame();
  11.                //设置窗体大小
  12.                 f.setSize(300, 200);
  13.               // 设置窗体位置
  14.                 f.setLocation(500, 300);
  15.                   //设置布局管理器
  16.                 f.setLayout(new FlowLayout());
  17.                 //创建一个按钮
  18.                 JButton btn = new JButton("Submit");

  19.               //上面的代码我都懂, 但是从这里开始, 不是很理解,望详细解释 ,我只知道下面的代码可以在单击按钮时, 可以在控制台上面打印出Hello world, 但是具体是怎么执行的却不清楚..         
  20.                 ActionListener listener = new MyAction();
  21.                 btn.addActionListener(listener);
  22.                 f.add(btn);
  23.                
  24.                 f.setVisible(true);
  25.         }
  26. }

  27. class MyAction implements ActionListener {
  28.            //还有这里的形参evt接受的到底是什么???是怎样传递给evt的?
  29.         public void actionPerformed(ActionEvent evt) {
  30.                 System.out.println("Hello world!");
  31.         }
  32. }
复制代码
回复 使用道具 举报
class MyAction implements ActionListener {
            //还有这里的形参evt接受的到底是什么???是怎样传递给evt的?
                  evt是事件,就是你按键盘或者点鼠标引发的这件事件,传递是有虚拟机来传递,不用管。
         public void actionPerformed(ActionEvent evt) {
                 System.out.println("Hello world!");
         }
}
ActionEvent 事件由虚拟机内部进行管理,用户无需关注,当触发了事件后虚拟机回调actionPerfomed()
回复 使用道具 举报
新建一个事件监听器 ,把它绑定到提交按钮上面。再把这个提交按钮加到窗口界面上去。下面形参接受的就是你方法里面的内容。这个内容会传到动作按钮上去
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马