【问题标题】:how do I make this window close in java?如何在java中关闭这个窗口?
【发布时间】:2016-01-20 22:07:20
【问题描述】:

我已经有了这个项目,但我遇到了更多问题。 SetMusicDialog 的对话框打开,但当我尝试退出时它不会关闭。我有一个 System.exit,但我不确定为什么窗口不会关闭。

import java.awt.*;
import java.io.*;
public class SetMusicDialog extends Dialog
{
  public static String sng;
  public SetMusicDialog()
  {

    super ((Dialog)null, "Set Music");
     Panel mpanel;
     Font l = new Font("Helvetica", Font.ITALIC, 12);
      setFont(l);//sets font
      setBackground(Color.cyan);

      Panel f = new Panel();
      f.add("West", new Button("Death Grips"));
      f.add("East", new Button("Siren"));
      add("South",f);
      pack();                           // make it just fit
      resize(preferredSize());
      move(200,200);
  }
  public boolean handleEvent1 (Event evt)
  {
    switch (evt.id)
    {
      case Event.WINDOW_DESTROY:
        System.exit(0);
        dispose();
        return true;
      case Event.ACTION_EVENT:
        if("Death Grips".equals(evt.arg))
      {
        sng= "breakmirrors.wav";
      }
      else if("Siren".equals(evt.arg))
      {
       sng= "bip.wav";
      }
      dispose();
     }
    return false;
  }
}

【问题讨论】:

  • 使用 AWT,您需要使用 WindowListener,请参阅 How to Write Window Listeners。但是,如果可以的话,我强烈建议不要使用 AWT,而是使用 Swing,它为 JFrameJDialog 提供了 defaultCloseOperation 属性
  • 我会试试的,我以前没有使用 WindowListener 就做到了,但我似乎无法让它再次工作。

标签: java window awt


【解决方案1】:

你可以添加这个:

addWindowListener( new WindowAdapter() {
    public void windowClosing(WindowEvent e){
        dispose();
        System.exit(0);
    }
});

windowClosed 不会检测用户是否尝试关闭窗口。它只会在窗口关闭时运行。所以使用windowClosing

另外,通过使用WindowAdapter,您不需要编写WindowListener的所有方法。

我在你的构造函数中添加了这段代码,它可以正常工作。

【讨论】:

    【解决方案2】:

    如果您使用 AWT,您应该按照 MadProgrammer 的说明创建一个 WindowListener。基本上,WindowListener 是一个具有在某些与窗口相关的操作发生时运行的方法的类。编写在Dialog(扩展Window)关闭时运行的代码:

    //d is a dialog
    
    d.addWindowListener(new WindowListener() {
    
        //You'll need to implement all the abstract methods.  leave them empty.
    
        @Override
        public void windowClosed(WindowEvent e) {
            //Your code
        }
    
    });
    

    基本上,您是在匿名实现抽象类WindowEvent。确保你也实现了所有其他方法,否则你会得到编译器错误。您的 IDE 应自动实现所有方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-25
      • 2022-01-07
      • 1970-01-01
      • 2021-04-17
      • 2015-06-04
      • 1970-01-01
      相关资源
      最近更新 更多