Java 内部类中的WindowAdapter
我正在做一个Java学校的作业,我以为我已经完成了所有的任务,但后来又重新检查了需求,意识到我忽略了一个特定的需求,现在我需要重写一段代码,但我不明白这些需求要求我做什么 当GUI窗口关闭时,我需要一些事情发生,目前我将它作为一个简单的方法编写,它工作正常,但分配是说“处理程序应该是扩展WindowAdapter类的内部类的对象。”我已经对内部类和扩展有了基本的了解,但这句话需要成为一个对象吗?我很困惑 目前,我只是将其作为GUI类的一部分,它运行良好,我知道要求有所不同,但我不知道如何做到:Java 内部类中的WindowAdapter,java,user-interface,Java,User Interface,我正在做一个Java学校的作业,我以为我已经完成了所有的任务,但后来又重新检查了需求,意识到我忽略了一个特定的需求,现在我需要重写一段代码,但我不明白这些需求要求我做什么 当GUI窗口关闭时,我需要一些事情发生,目前我将它作为一个简单的方法编写,它工作正常,但分配是说“处理程序应该是扩展WindowAdapter类的内部类的对象。”我已经对内部类和扩展有了基本的了解,但这句话需要成为一个对象吗?我很困惑 目前,我只是将其作为GUI类的一部分,它运行良好,我知道要求有所不同,但我不知道如何做到:
addWindowListener (new WindowAdapter()
{
public void windowCloses(WindowEvent e)
{
try
{
//Code logic
}
catch (Exception ex)
{
//Error print
e.getWindow().dispose();
}
}
正如我所说,现在每个人都工作得很好,但我不认为这是必要的。我会问我的教授,但我认为他不会在最后期限前及时回复我
如何重写此代码以满足要求?”
谢谢
编辑:根据我到目前为止收到的信息添加此内容(谢谢!)
我想我明白了。现在我创建了这个类的一个实例,并将windowListener添加到其中 据我所知,这将有助于:
addWindowListener(new WindowAdapter() {
public void windowCloses(WindowEvent e) {
try{
int confirmed = JOptionPane.showConfirmDialog(null,
"This is my handler. Shall I Exit?", "Exit Message Box, JOptionPane.YES_NO_OPTION);
if (confirmed == JOptionPane.YES_OPTION) {
dispose();
}
}
catch(Exception ex){
//Error print
e.getWindow.dispose()
}
});
看来你一切都对了 现在我假设您的老师的意思是:处理程序应该是扩展
WindowAdapter
类的内部类的实例(而不是“对象”)
通过执行以下操作:
new WindowAdapter() {
// Use annotations, it's useful :)
@Override
public void windowCloses(WindowEvent e) {
// ...
}
}
。。。实际上,您正在创建一个新的匿名类扩展WindowAdapter
。在这个新定义中,您覆盖WindowAdapter\windowCloses
方法,然后在新对象中实例化它,并将其作为参数传递给addWindowListener
显然,您的老师希望您实际定义一个内部类,并创建一个新的实例。我不想给你这个的密码,但是你离我很近,你马上就会明白的 请快速查看我下面的答案,并阅读有关内部类的基本示例,我相信您在相应地调整代码方面不会有问题。如果需要的话,请不要犹豫要求精度!别忘了投票支持@ccjmne的答案,如果它回答了你的问题,也许会接受它。很好。哇,谢谢@HovercraftFullOfEels,这对我来说意味着很多来自你!用这种方式编写的代码,我应该把windowListener放在哪里?我想我理解得更好了,它不完全清楚,但我编辑了原稿,添加了我所做的。谢谢是的,我刚读了你最新的问题!它很完美(除了约定所有类名都以大写开头),你明白了!现在您可以使用
addWindowListener(新的InnerClass())
:)谢谢!这封小写的信只是我在赶时间,我尽可能地遵循传统惯例。谢谢你的输入,但看起来你可能误解了。我不需要帮助编写代码逻辑,我省略了它,因为它一切正常。我实际上是在寻求一种将代码作为内部类重写的方法,但我对整个过程感到相当困惑。
new WindowAdapter() {
// Use annotations, it's useful :)
@Override
public void windowCloses(WindowEvent e) {
// ...
}
}