import java.awt.*;
public class Memo extends Frame{
public static void main(String args[]){
Memo m;
        m=new Memo();
m.show();
}
}
我用上面代码生成了一个窗口,这个窗口可以最大,最小,但是不能关闭,为什么?

解决方案 »

  1.   

    因为你没有响应关闭窗口事件 
    写个内部类,然后添加import java.awt.*; 
    public class Memo extends Frame{ 
    public static void main(String args[]){ 
    Memo m; 
            m=new Memo(); 
    m.addwindowListener(new close()); //添加事件
    m.show(); 

    class close extends WindowAdapter{    //实现该类,public void windowClosing(WindowEvent e){ //关闭窗口的方法System.exit(0); //关闭窗口
    }}} 
    }大概就是这样 我机子上现在没有编辑器 不能测试 
      

  2.   


    import java.awt.Frame;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;class Test extends Frame {    private static final long serialVersionUID = -4558650181170382625L;
        
        boolean openWindow;    public Test() {
            openWindow = false;
            setTitle("测试适配器类与监听类");
            setSize(300, 200);
            addWindowListener(new MyWindowAdapter());
        }    private class MyWindowAdapter extends WindowAdapter {
            public void windowClosing(WindowEvent wevent) {// 实现窗口关闭
                if (openWindow)
                    dispose();
                else
                    System.exit(0);
            }
        }
        public static void main(String[] args) {
            Test frm = new Test();
            frm.setVisible(true);
        }
    }
      

  3.   

    关闭窗口  你可以通过关闭程序来实现即System.exit(0);具体的就是上面  两位   写的!
      

  4.   

    呵呵,其实是可以关闭的,去任务管理器关闭进程。
    那如果正常关闭的话,有很多方法了。
    1.如果是JFrame的话很简单,在构造函数里添加句setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    2.这里是Frame,那只能添加WindowListener事件了,具体怎么加就看2、4楼的了
      

  5.   

    用匿名类比较合适:import java.awt.Frame;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    public class Memo extends Frame { public static void main(String[] args) {
    new Memo().launch();
    } public void launch() {
    setBounds(50, 50, 300, 300);
    setVisible(true);
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });


    }
    }
      

  6.   

    谢谢各位!
    刚才查看了帮助文档,关于addWindowListener
    public void addWindowListener(WindowListener l)
    又翻到WindowListener
    是个接口:Interface WindowListener
    又说
    All Known Implementing Classes: 
    AWTEventMulticaster, BasicToolBarUI.FrameListener, JMenu.WinListener, WindowAdapter 
    我的理解是WindowAdapter实现了WindowListener接口,
    但是在WindowListener中定义了7个方法,而在WindowAdapter中定义了10种方法,有些比如WindowStateChanged()
    在接口WindowListener中并没定义??
    是否可以在一个类中实现多个接口?
    public abstract class WindowAdapterextends Object
    implements WindowListener, WindowStateListener, WindowFocusListener
    那么,abstract类是种什么类?
    文档中又说:
    If you implement the WindowListener interface, you have to define all of the methods in it. This abstract class defines null methods for them all, so you can only have to define methods for events you care about上面的疑问哪位能详细解释一下?谢谢!
      

  7.   

    是否可以在一个类中实现多个接口? 
    可以,你所说的WindowAdapter中定义了10种方法,而WindowListener中定义了7个方法
    其他的三个方法就是实现的另外的接口中的方法abstract类是种什么类?
    抽象类,可以查看一下JAVA的基础,和接口类似,一般情况,只写方法,不写实现过程
    在抽象类中,一个方法可以是抽象的方法,也可以不是抽象的方法
    If you implement the WindowListener interface, you have to define all of the methods in it. This abstract class defines null methods for them all, so you can only have to define methods for events you care about 

    这其实就是说的“适配器模式”,如果你实现了WindowListener接口,那么你将要实现这个接口的所有方法,
    而你继承这个抽象类(这个抽象类中所有的方法全是抽象方法),就可以只为
    你所关注的方法进行重写即可
      

  8.   

    那么,我也可以这样写了:??public Memo(){
     addWindowListener(new MyWindowListner());
    }private class MyWindowListner implement WindowListner {
            public void windowClosing(WindowEvent wevent) {
                                System.exit(0);
            }
            然后其他几种方法全部实现
    }
      

  9.   

    真是奇怪,不能识别内部类?import java.awt.Frame;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    public class Memo extends Frame{
    private class MyWindowAdapter extends WindowAdapter{
    public void windowClosing(WindowEvent e){
    System.exit(0);
    }
    }
    public static void main(String args[]){
    Memo m;
      m=new Memo();
      m.addWindowListener(new MyWindowAdapter());
    m.show();
    }

    }编译结果:
    D:\Javanet>javac Memo.java
    Memo.java:13: non-static variable this cannot be referenced from a static contex
    t
              m.addWindowListener(new MyWindowAdapter());
                                  ^
    1 error???谢谢!!