黑马程序员技术交流社区

标题: 关于awt的小问题 [打印本页]

作者: 月光海    时间: 2014-4-19 11:08
标题: 关于awt的小问题
本帖最后由 月光海 于 2014-4-19 11:49 编辑
  1. package awtDemo;

  2. import java.awt.Button;
  3. import java.awt.FlowLayout;
  4. import java.awt.Frame;
  5. import java.awt.event.WindowAdapter;
  6. import java.awt.event.WindowEvent;

  7. public class Demo1 {

  8.         public static void main(String[] args) {
  9.                 // TODO Auto-generated method stub
  10.                 Frame f=new Frame("我是一个小窗口,啦啦啦");
  11.                 f.setSize(600, 500);
  12.                 f.setLocation(300, 200);
  13.                 f.setLayout(new FlowLayout());
  14.                 Button b=new Button("我是按钮,拉拉");
  15.                 f.add(b);
  16.                 f.addWindowListener(new WindowAdapter() {
  17.                         public void windowClosing(WindowEvent e
  18.                         {
  19.                                 System.out.println("关啦");
  20.                                 System.exit(0);
  21.                         }
  22.                 });
  23.                 f.setVisible(true);
  24.         }

  25. }
复制代码
public void windowClosing(WindowEvent e)//这个是窗口的关闭动作,我里面有语句可执行。我明白是为什么,但是,WindowListener是个接口,接口中有窗口从正常状态变成最小化的方法,这个方法是抽象的windowIconified(WindowEvent e)窗口从正常状态变为最小化状态时调用。“
我用的是WindowListener的子类WindowAdapter,但是它里面的这个方法为空啊,为什么在窗口上点击最小化按钮的时候能够将窗口最小化呢????

作者: ノtrack    时间: 2014-4-19 11:11
void windowIconified(WindowEvent e)
          图标化窗口时调用。

适配里面有这个方法呀
作者: 月光海    时间: 2014-4-19 11:13
ノtrack 发表于 2014-4-19 11:11
void windowIconified(WindowEvent e)
          图标化窗口时调用。

这个方法为空啊,你看API说明:接收窗口事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象,而且我又没有去重写这个方法
作者: ノtrack    时间: 2014-4-19 11:16
原因:因为本来监听的时候应该使用接口Listener的,比如WindowListener,但是因为窗口(或者鼠标、键盘)有很多事件,所以在接口中定义了好几个抽象函数。如果直接实现接口的话需要把所有的抽象函数一一实现过去,这不划算,所以Java定义了适配器,用空函数实现了所有的抽象函数。我们自己定义的时候继承适配器类就等于实现了Listener接口,同时只需重写我们需要的函数就可以了。
作者: ノtrack    时间: 2014-4-19 11:18
月光海 发表于 2014-4-19 11:13
这个方法为空啊,你看API说明:接收窗口事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创 ...

回复内容在下面   推荐楼主看下适配器设计模式  http://www.cnblogs.com/java-my-life/archive/2012/04/13/2442795.html     
作者: 月光海    时间: 2014-4-19 11:21
ノtrack 发表于 2014-4-19 11:16
原因:因为本来监听的时候应该使用接口Listener的,比如WindowListener,但是因为窗口(或者鼠标、键盘)有 ...

你确定看懂我说的了?你说的这些我很清楚,我的意思是适配器中这个方法的内容为空,接口中就更不用说了根本没有方法体,既然适配器中这个方法为空,我又没有重写,那这个方法是应该为空啊,什么都没有才对啊,怎么实现从正常状态变为最小化的
作者: 月光海    时间: 2014-4-19 11:35
ノtrack 发表于 2014-4-19 11:18
回复内容在下面   推荐楼主看下适配器设计模式  http://www.cnblogs.com/java-my-life/archive/2012/04/1 ...

这个文章的内容我看的明白,但是和我所描述的问题却不是一回事,不过还是谢谢你的热心
作者: ノtrack    时间: 2014-4-19 11:41
[quote]月光海 发表于 2014-4-19 11:35
这个文章的内容我看的明白,但是和我所
作者: ノtrack    时间: 2014-4-19 11:45
用于接收窗口事件的侦听器接口。旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 WindowAdapter(仅重写所需的方法)。然后使用窗口的 addWindowListener 方法将从该类所创建的侦听器对象向该 Window 注册。当通过打开、关闭、激活或停用、图标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,并将 WindowEvent 传递给该方法。
作者: 月光海    时间: 2014-4-19 11:53
ノtrack 发表于 2014-4-19 11:45
用于接收窗口事件的侦听器接口。旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象 ...

哥,你说来说去都在给我说这个东西怎么用,只是你说的”将调用该侦听器对象中的相关方法“这个方法是不是为空??????WindowAdapter里面实现接口的时候为空,,我创建匿名内部类的时候没重写,还是空,那调用了又怎么样呢,不是应该什么都没有吗?为什么会冲正常状态变成最小化呢????
作者: ノtrack    时间: 2014-4-19 12:21
月光海 发表于 2014-4-19 11:53
哥,你说来说去都在给我说这个东西怎么用,只是你说的”将调用该侦听器对象中的相关方法“这个方法是不是 ...

当我没说过   你那么刨根到底干嘛 封装好了你就用呗   你去看Window系统怎么实现吧   肯定是使用系统底层的呗      




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