什么是相当于JFrame.setDefaultCloseOperation的AWT?

时间:2009-08-06 04:35:07

标签: java awt

我们正在使用JFrame的 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)方法。

我想支持原生外观,因此我必须使用AWT而不是Swing。那么什么是相当于setDefaultCloseOperation的AWT方法?

我是否认为为了支持原生外观我们应该使用AWT而不是Swing?

3 个答案:

答案 0 :(得分:6)

在AWT中没有一种等效的方法,但您可以自己构建它。

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

您可以在不使用AWT的情况下接近原生保真度。而是设置默认的Look&感觉使用UIManager。

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeel());

您必须在显示任何UI之前执行此操作,否则事情会变得有些毛茸茸。

答案 1 :(得分:1)

Java在awt和swing中提供了一个接口来处理窗口事件命名窗口监听器 我们使用setDefaultCloseOperation()方法只是为了摆脱swing中冗长的编码 窗口侦听器会覆盖7种方法 命名

  public void windowOpened(WindowEvent e)        {   }
  public void windowClosed(WindowEvent e)         {   }
  public void windowActivated(WindowEvent e)     {   }
  public void windowDeactivated(WindowEvent e) {   }
  public void windowIconified(WindowEvent e)      {   }
  public void windowDeiconified(WindowEvent e)   {   }
 public void windowClosing(WindowEvent e)

{}

我们必须将退出代码放在最后一个方法中,因为它处理窗口关闭

或者我们可以使用适配器类。 使用适配器类比允许我们只覆盖一个或两个抽象方法的侦听器更有利,而不是强制覆盖侦听器的所有抽象方法。但是适配器的问题是它们被设计为抽象类,因此我们不能扩展到我们的类,因为类已经扩展了Frame(Java不支持多重继承)。

例如,在程序中使用以下代码

Frame f = new Frame();
f.addWindowListener(new WindowListener ()
{
    public void windowClosing(WindowEvent we)
    {
        System.exit(0);
    }
});

答案 2 :(得分:0)

或者在代码中设置L'n'F,可以使用java / javaw参数-Dswing.defaultlaf。

例如,在Windows下可以指定 -Dswing.defaultlaf = com.sun.java.swing.plaf.windows.WindowsLookAndFeel

可以找到更多信息here