黑马程序员技术交流社区

标题: 窗体监听的烦恼 [打印本页]

作者: 胥文    时间: 2013-1-30 19:37
标题: 窗体监听的烦恼
本帖最后由 胥文 于 2013-1-30 22:15 编辑

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
public class WindowEvent {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  Frame f = new Frame("我的awt");
  f.setSize(500, 600);
  f.setLocation(100, 200);
  f.setLayout(new FlowLayout());
  Button b = new Button("我的按钮");
  f.add(b);
  f.addWindowListener(new WindowAdapter()//此处提示:The method windowClosing(WindowEvent) from the type new WindowAdapter(){} is never used locally
  {
   public void windowClosing(WindowEvent e)
   {
    System.out.println("wo guan");
    System.exit(0);
   }
  });
  f.setVisible(true);
}
}
提示:这是在eclipse中运行的
添加了窗体监听,但是关闭的时候,关闭不了窗口,
大家看看是什么原因
是不是,少了什么东西啊,我看代码正确,包也导了,就是不知道为什么了


作者: 李培根    时间: 2013-1-30 20:14
  1. package cn.itcast.GUI;

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



  9. public class ActionDemo {
  10. //        定义该图形中所需的组件的引用。
  11.         private Frame f;
  12.         private Button but;
  13.        
  14.         ActionDemo(){
  15.                 init();
  16.         }
  17.        
  18.         public void init(){
  19.                 f = new Frame("我的窗体");
  20. //                对Frame进行基本设置。
  21.                 f.setBounds(300, 200, 400, 300);
  22.                 f.setLayout(new FlowLayout());
  23.                 but = new Button("我的按钮");
  24. //                将组件添加到frame中。
  25.                 f.add(but);
  26.                
  27. //                加载创意上的事件
  28.                 myEvent();
  29.                
  30. //                显示窗体
  31.                 f.setVisible(true);
  32.         }
  33.        
  34.         private void myEvent(){
  35.                 f.addWindowListener(new WindowAdapter() {
  36.                         public void windowClosing(WindowEvent e){
  37.                                 System.out.println("我关");
  38.                                 System.exit(0);
  39.                         }
  40.                 });
  41.                
  42. //                让按钮具备退出程序的功能,按钮就是事件源
  43. //                通过关闭窗体示例了解到,想要知道那个组件具备什么样的特有监听器。需要查看该组件对象的功能。
  44. //                通过查看button的藐视,发现按钮支持一个特有的监听addActionListener.
  45.                
  46. //                给按钮添加一个活动监听,少数几个没有适配器的方法
  47.                 but.addActionListener(new ActionListener() {
  48.                        
  49.                         @Override
  50.                         public void actionPerformed(ActionEvent e) {
  51.                                 System.out.println("按钮触发");
  52.                                 System.exit(0);
  53.                         }
  54.                 });
  55.         }
  56.        
  57.         public static void main(String[] args) {
  58.                 new ActionDemo();
  59.         }
  60. }
复制代码

作者: txl    时间: 2013-1-30 20:25
我也才发现了这个问题,代码没有问题,确实无法关闭,坐等大神
作者: vmvm555    时间: 2013-1-30 20:55
楼主的疑惑也是我的疑惑,最近就在琢磨这问题了
作者: 钱志新    时间: 2013-1-30 21:28
代码编写上确实是没有问题的,可是按你程序的意思是点击按键之后就是关掉窗口,所以,要在按键上弄个监听。 在f.setVisible(true);上面添加以下代码:b.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) System.exit(0);});
作者: 胥文    时间: 2013-1-30 21:59
我在学下面的活动监听的时候,又遇到这个问题了,不过终于找出原因了,很开心,在这里和大家分享一下:就是事件要写全称
代码如下:
import java.awt.*;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.*;
import java.awt.event.WindowAdapter;

public class ActionEvent {

        /**
         * @param args
         */
        private Frame f;
        private Button but;
        ActionEvent()
        {
                ini();
        }
        public void ini()
        {
                f=new Frame("wo de");
                but = new Button("an niu");
                f.setBounds(200, 100, 600, 500);
                f.setLayout(new FlowLayout());
               
                f.add(but);
                event();
                f.setVisible(true);
        }
        public void event()
        {
                f.addWindowListener(new WindowAdapter()
                {
                        public void windowClosing(java.awt.event.WindowEvent e)//注意这里事件写成全称就好了

                        {
                                System.out.println("chuang ti");
                        }
                });
                but.addActionListener(new ActionListener()
                {

                        @Override
                        public void actionPerformed(java.awt.event.ActionEvent e) //注意这里事件写成全称就好了
                                               {
                                // TODO Auto-generated method stub
                                System.exit(0);
                        }
                       

                });
        }
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                new ActionEvent();
        }

}

作者: vmvm555    时间: 2013-1-30 22:39
胥文 发表于 2013-1-30 21:59
我在学下面的活动监听的时候,又遇到这个问题了,不过终于找出原因了,很开心,在这里和大家分享一下:就是 ...

楼主啊,我这回真2了,楼主你说你写代码为什么要弄一个Sun已经定义好的类名做自己的类的名称呢WindowEvent这个类在java.awt.event这个包中已经有了,我导入类的时候怎么都导不进去,郁闷了半个钟头,把类名改为WindowEvent2的时候发现自己果断2了




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