zoukankan      html  css  js  c++  java
  • Java-窗口关闭

    转载:

    初学者往往在学习Java Application往往会遇到窗口关不掉的困惑,比如说一下程序:

    复制代码
     1 package applicationGraphicsInOut;
    2 import java.awt.*;
    3 import java.awt.event.*;
    4 public class ApplicationGraphicsInOut {
    5 public static void main(String args[])
    6 {
    7 new FrameInOut();
    8 }
    9
    10 }
    11 class FrameInOut extends Frame implements ActionListener
    12 {
    13 Label prompt;
    14 TextField input,output;
    15 FrameInOut()
    16 {
    17 super("图形界面的Java Application程序");
    18 prompt=new Label("请输入您的名字");
    19 input=new TextField(6);
    20 output=new TextField(20);
    21 setLayout(new FlowLayout());
    22 add(prompt);
    23 add(input);
    24 add(output);
    25 input.addActionListener(this);
    26 setSize(300,200);
    27 setVisible(true);
    28 }
    29 public void actionPerformed(ActionEvent e)
    30 {
    31 output.setText(input.getText()+",欢迎你");
    32 }
    33 }
    复制代码

    该程序在Eclipse下运行通过,但是就是不能关不掉!

    什么原因呢?

    其中有以下几种解决方法:

    1:

    把main函数改为如下

    复制代码
     1 public static void main(String args[])
    2 {
    3 Frame fr=new FrameInOut();
    4 fr.addWindowListener(new java.awt.event.WindowAdapter()
    5 {
    6 public void windowClosing(java.awt.event.WindowEvent e)
    7 {
    8 System.exit(0);
    9 }
    10 });
    11
    12 }
    复制代码

    这种方法我有点不解,addWindowListener()括号里是怎么回事,我有点纳闷,我还没见过这样的形式,不过我猜可能是实现了java.awt.event.WindowAdapter()类里面的一个抽象方法windowClosing(),但是我真没有见过这种格式,求解释。

    2:

    对WINDOWS_CLOSING事件做出响应,每个窗口都有3个控制图标,其中最小化和最大化操作Frame可自动完成,而关闭窗口的操作不能通过单击关闭图标实现,需要程序专门书写有关的代码,其实这种方法与上一种一样,则不过换了一种格式,一种初学者更明白易懂的格式。

    在FrameInOut()构造函数里面添加监听函数,添加监听函数之后构造函数如下:

    FrameInOut()
        {
            super("图形界面的Java Application程序");
            prompt=new Label("请输入您的名字");
            input=new TextField(6);
            output=new TextField(20);
            setLayout(new FlowLayout());
            addWindowListener(new HandleWin());  //添加监听函数,引发WindowEvent事件
            add(prompt);
            add(input);
            add(output);
            input.addActionListener(this);
            setSize(300,200);
            setVisible(true);
        }

     其中HandleWin()为内部类,主要实现WindowListener借口,添加监听之后会引发WindowEvent类代表的所以七中事件,具体情况如下:

    (1)WINDOW_ACTIVATED:代表窗口被激活(在屏幕的最前方待命)。

    (2)WINDOW_DEACTIVATED:代表窗口失活(其他窗口被激活后原活动窗口失活)。

    (3)WINDOW_OPENED:代表窗口被打开。

    (4)WINDOW_CLOSED:代表窗口被关闭(关闭窗口后发生)。

    (5)WINDOW_CLOSING:代表窗口正在被关闭(指关闭前。如单击窗口标题栏上的关闭按钮时)。

    (6)WINDOW_ICONIFIED:代表使窗口最小化成图标。

    (7)WINDOW_DEICONIFIED:代表使窗口从图标恢复

    在WindowEvent类的主要方法有:

    public window getWindow();

    此方法返回引发当前WindowEvent事件的具体窗口对象,与getSource()方法返回的是相同的事件引用。

    HandleWin定义如下:

    复制代码
    class HandleWin extends WindowAdapter
    {
    public void windowClosing(WindowEvent e)
    {
    (e.getWindow()).dispose();
    System.exit(0);
    }
    }
    复制代码

    HandleWin是窗口事件的裁剪类WindowAdapter的子类,重载了WindowClosing()方法。

    当然也可以这样写HandleWin

    复制代码
     1 class HandleWin implements WindowListener
    2 {
    3 public void windowClosing(WindowEvent e)
    4 {
    5 (e.getWindow()).dispose();
    6 System.exit(0);
    7 }
    8
    9 @Override
    10 public void windowActivated(WindowEvent arg0) {
    11 // TODO Auto-generated method stub
    12
    13 }
    14
    15 @Override
    16 public void windowClosed(WindowEvent arg0) {
    17 // TODO Auto-generated method stub
    18
    19 }
    20
    21 @Override
    22 public void windowDeactivated(WindowEvent arg0) {
    23 // TODO Auto-generated method stub
    24
    25 }
    26
    27 @Override
    28 public void windowDeiconified(WindowEvent arg0) {
    29 // TODO Auto-generated method stub
    30
    31 }
    32
    33 @Override
    34 public void windowIconified(WindowEvent arg0) {
    35 // TODO Auto-generated method stub
    36
    37 }
    38
    39 @Override
    40 public void windowOpened(WindowEvent arg0) {
    41 // TODO Auto-generated method stub
    42
    43 }
    44 }
    复制代码

    它要实现WindowListener的全部7个抽象方法!

  • 相关阅读:
    记第一场省选
    POJ 2083 Fractal 分形
    CodeForces 605A Sorting Railway Cars 思维
    FZU 1896 神奇的魔法数 dp
    FZU 1893 内存管理 模拟
    FZU 1894 志愿者选拔 单调队列
    FZU 1920 Left Mouse Button 简单搜索
    FZU 2086 餐厅点餐
    poj 2299 Ultra-QuickSort 逆序对模版题
    COMP9313 week4a MapReduce
  • 原文地址:https://www.cnblogs.com/lzhat/p/4321976.html
Copyright © 2011-2022 走看看