黑马程序员技术交流社区

标题: GUI 小问题 [打印本页]

作者: 、__WSD吴少东    时间: 2013-4-23 18:58
标题: GUI 小问题
本帖最后由 、__WSD吴少东 于 2013-4-24 00:21 编辑

    System.out.println(e.getSource());
    Button b = (Button)e.getSource();
   
    Frame f1 = (Frame)b.getParent();
    System.out.println(b.getParent());
    f1.add(new Button("button-"));
    f1.validate();



这两句话怎么理解的?  视频上没有{:soso_e143:} 查了下API 说的也好笼统。  运行了一下,不知道那结果有什么用。
全代码附上
  1. import java.awt.*;
  2. import java.awt.event.*;


  3. class FrameDemo
  4. {
  5.         //定义图形中所需要的组件引用
  6.         private Frame f;//框架
  7.         private Button bu;//按钮

  8.         //创建构造函数,就能有图形
  9.         FrameDemo()
  10.         {
  11.                 init();
  12.         }
  13.         public void init()
  14.         {
  15.                 f = new Frame("My Frame");//创建框架,并写入标题栏
  16.                
  17.                 f.setBounds(300,100,500,400);//设置所在位置,
  18.                 //左上角 距左 距上 自身,宽度 高度
  19.                 f.setLayout(new FlowLayout());//选择布局格式,默认流水式
  20.                 bu = new Button("My Button");//创建按键并设置按键名字
  21.                 f.add(bu);//添加组件到框架

  22.                 //加载框架上事件
  23.                 myEvent();

  24.                 //显示窗体
  25.                 f.setVisible(true);
  26.         }

  27.         private void myEvent()
  28.         {
  29.                 //框架上事件发生的处理,
  30.                 f.addWindowListener(new WindowAdapter()
  31.                 {
  32.                         //点击关闭按钮,应该进行的操作
  33.                         public void windowsClosing(WindowEvent e)
  34.                         {
  35.                                 System.exit(0);//退出程序
  36.                         }
  37.                 });

  38.                 //按键进行的事件监听
  39.                 bu.addActionListener(new ActionListener()
  40.                 {
  41.                         public void actionPerformed(ActionEvent e)
  42.                         {
  43.                                 //System.exit(0);

  44.                                 System.out.println(e.getSource());
  45.                                 Button b = (Button)e.getSource();
  46.                                 
  47.                                 Frame f1 = (Frame)b.getParent();
  48.                                 System.out.println(b.getParent());
  49.                                 f1.add(new Button("button-"));
  50.                                 f1.validate();
  51.                         }
  52.                 });
  53.         }
  54.         

  55. }
  56. class  GuiDemo
  57. {


  58.         public static void main(String[] args)
  59.         {
  60.                 new FrameDemo();
  61.         }
  62. }
复制代码

作者: harborbest    时间: 2013-4-23 21:11
getSource()是类 ActionEvent从类 java.util.EventObject 继承的方法,该方法返回最初发生 Event 的对象。也就是说这个方法返回的是调用这个监听类的控件对象,Button b = (Button)e.getSource();这句话就是返回的Button按钮就是它的控件对象。
getParent()是类Frame从类 java.awt.Component 继承的方法,该方法返回此组件的父级容器。也就是说Frame f1 = (Frame)b.getParent();
b按钮的父级容器是Frame。




作者: 黑马19我最牛    时间: 2013-4-23 21:18
  1. import java.awt.*;
  2. import java.awt.event.*;


  3. class FrameDemo
  4. {
  5.         //定义图形中所需要的组件引用
  6.         private Frame f;//框架
  7.         private Button bu;//按钮

  8.         //创建构造函数,就能有图形
  9.         FrameDemo()
  10.         {
  11.                 init();
  12.         }
  13.         public void init()
  14.         {
  15.                 f = new Frame("My Frame");//创建框架,并写入标题栏
  16.                
  17.                 f.setBounds(300,100,500,400);//设置所在位置,
  18.                 //左上角 距左 距上 自身,宽度 高度
  19.                 f.setLayout(new FlowLayout());//选择布局格式,默认流水式
  20.                 bu = new Button("My Button");//创建按键并设置按键名字
  21.                 f.add(bu);//添加组件到框架

  22.                 //加载框架上事件
  23.                 myEvent();

  24.                 //显示窗体
  25.                 f.setVisible(true);
  26.         }

  27.         private void myEvent()
  28.         {
  29.                 //框架上事件发生的处理,
  30.                 f.addWindowListener(new WindowAdapter()
  31.                 {
  32.                         //点击关闭按钮,应该进行的操作
  33.                         public void windowsClosing(WindowEvent e)
  34.                         {
  35.                                 System.exit(0);//退出程序
  36.                         }
  37.                 });

  38.                 //按键进行的事件监听
  39.                 bu.addActionListener(new ActionListener()
  40.                 {
  41.                         public void actionPerformed(ActionEvent e)
  42.                         {
  43.                                 //System.exit(0);

  44.                                 System.out.println(e.getSource());      //getSource()       最初发生 Event 的对象。  e是监听的事件的对象,  e.getSource()就是获取最初发生 这个事件的对象,因为你的是点击一个按钮,因此就是获取这个按钮组件,这个是你编程的 因此可以强转为按钮组件
  45.                                 Button b = (Button)e.getSource();   
  46.                                 
  47.                                 Frame f1 = (Frame)b.getParent();   //getParent()        获得父级容器,  b.getParent()  就是获得这个按钮组件是在哪个容器里面. 因为按钮组件 是在Frame组件里面,因此获得是一个Frame组件对象  其实这个里的f1,和f是一个对象.
  48.                                 System.out.println(b.getParent());
  49.                                 f1.add(new Button("button-"));
  50.                                 f1.validate();
  51.                         }
  52.                 });
  53.         }
  54.         

  55. }
  56. class  GuiDemo
  57. {


  58.         public static void main(String[] args)
  59.         {
  60.                 new FrameDemo();
  61.         }
  62. }
复制代码

作者: 、__WSD吴少东    时间: 2013-4-23 22:19
harborbest 发表于 2013-4-23 21:11
getSource()是类 ActionEvent从类 java.util.EventObject 继承的方法,该方法返回最初发生 Event 的对象。 ...

控件对象是什么? 我只有视频,别的什么都没有。
作者: 李慧声    时间: 2013-4-23 23:54
getSource() 指的是 最初发生 Event 的对象,利用它的引用去获取事件源.按了button1,产生button2,button就是事件源,再例如关闭一个窗口产生windowEvent事件~e.egtSourse()是获取事件源对象!就是窗口!
getParent() 获取此组件的父级,比如ArrayList的父几就是List,这里button的父级控件就是Component,而实现Component的是窗口Frame,那么button的父级控件就是frame喽,我是这样理解的。

作者: 、__WSD吴少东    时间: 2013-4-24 00:20
李慧声 发表于 2013-4-23 23:54
getSource() 指的是 最初发生 Event 的对象,利用它的引用去获取事件源.按了button1,产生button2,button ...

清楚好多。谢谢你了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2