我们正在使用 JFrame 的setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)方法。
我想支持原生的外观和感觉,因此我必须使用 AWT 而不是 Swing。那么等价于setDefaultCloseOperation 的AWT 方法是什么?
我认为为了支持本机外观和感觉我们应该使用 AWT 而不是 Swing,我是否正确?
AWT 中没有一种等效的方法,但您可以自己构建它。
myFrame.addWindowListener(
new WindowAdapter(){
public void windowClosed(WindowEvent e) { System.exit(0); }
}
);
您可以在不使用 AWT 的情况下接近原生保真度。相反,使用 UIManager 设置默认外观。
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeel());
您必须在显示任何 UI 之前执行此操作,否则事情会变得有些麻烦。
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);
}
});
作为在代码中设置 L'n'F 的替代方法,可以使用 java/javaw 参数 -Dswing.defaultlaf。
例如,在 Windows 下可以指定 -Dswing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel
更多信息可以在这里找到。