4

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

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

我认为为了支持本机外观和感觉我们应该使用 AWT 而不是 Swing,我是否正确?

4

3 回答 3

6

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

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

您可以在不使用 AWT 的情况下接近原生保真度。相反,使用 UIManager 设置默认外观。

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeel());

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

于 2009-08-06T05:01:51.767 回答
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);
    }
});
于 2014-10-19T11:22:45.647 回答
0

作为在代码中设置 L'n'F 的替代方法,可以使用 java/javaw 参数 -Dswing.defaultlaf。

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

更多信息可以在这里找到。

于 2009-08-06T07:03:12.210 回答