Key*_*ack 5 java user-interface awt
好吧,所以这可能是一个愚蠢的问题,但我是Java的新手,并且在我养成任何坏习惯之前尝试以正确的方式教自己.
无论如何,昨晚我正在编写一个程序,包括一个扩展Frame的自定义类和一个扩展Canvas的自定义类.main()方法在canvas类中,我在那里创建了一个框架类的实例.问题是当程序检测到窗口关闭事件时,我无法丢弃框架,因为我似乎无法从主方法外部访问它.如果我尝试在main()之外定义它,那么我就无法在其中使用它.所以我最终跳过dispose()并只使用System.exit(0).这好吗?它基本上是在做同样的事情吗?或者这是我需要解决的问题,如果是这样,任何想法如何?
非常感谢您的阅读,
科迪
您可以从source事件的属性获取对框架的引用:
class MyWindowListener extends WindowAdapter {
public void windowClosing(WindowEvent e){
Frame frame = (Frame) e.getSource();
frame.dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
或者,由于这是一个在构造函数中声明的匿名类(可能),您还可以访问封闭实例,因此您也可以将其写为:
class MyFrameClass extends Frame {
public MyFrameClass() {
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
MyFrameClass.this.dispose();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
或者你可以使它更简单(因为你的WindowListener没有自己的方法称为"dispose"):
public void windowClosing(WindowEvent e){
dispose();
}
Run Code Online (Sandbox Code Playgroud)
这不是一个愚蠢的问题.但是,由于垃圾收集器不是一个大问题,有时候当窗口关闭时你会想要执行一些清理工作.所以有些建议:
Window Closing事件应该从Frame本身处理.例如:
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
//code here to perform as the window is about to close.
}
});
Run Code Online (Sandbox Code Playgroud)
我建议你为main方法创建一个单独的类来调用Frame等.
| 归档时间: |
|
| 查看次数: |
18129 次 |
| 最近记录: |