Java中如何通过内部类实现关闭GUI窗口时打印指定文本?
解决窗口关闭时打印文本的问题
嘿,我一眼就瞅到问题所在啦!你已经写对了实现WindowAdapter的内部类CloseTheWindow,但你没把这个监听器注册到你的JFrame窗口上,所以窗口关闭的时候根本触发不了你写的windowClosing方法。下面给你一步步修正:
关键修改点
- 给JFrame添加窗口监听器,把你的内部类实例绑定到窗口上
- 修改窗口默认关闭行为,避免程序直接跳过你的自定义逻辑就退出
- 确保窗口设置为可见(很多人容易忘这一步)
修改后的完整代码
import java.awt.*; import java.util.*; import javax.swing.*; import java.awt.event.*; public class Sherlock extends JFrame implements ActionListener { JTextField find = null; JTextArea mainText = null; public Sherlock() { // 初始化你的组件(比如文本框、文本域) find = new JTextField(20); mainText = new JTextArea(10, 30); // 设置窗口基本属性 setTitle("Sherlock Finder"); setLayout(new BorderLayout()); add(find, BorderLayout.NORTH); add(new JScrollPane(mainText), BorderLayout.CENTER); // 关键1:修改默认关闭操作,不让程序直接退出 setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); // 关键2:注册你的内部类作为窗口监听器 addWindowListener(new CloseTheWindow()); setSize(400, 300); setVisible(true); // 关键3:让窗口显示出来 } @Override public void actionPerformed(ActionEvent e) { // 这里实现你的按钮点击等事件逻辑(如果有的话) } public static void main(String[] args) { // 现在只需要创建Sherlock实例就行,构造方法里已经搞定所有事 new Sherlock(); } // 你的内部类,逻辑是对的,不用改 class CloseTheWindow extends WindowAdapter { public void windowClosing(WindowEvent e) { System.out.println("Thank you for using finder"); System.exit(0); // 这里手动退出程序 } } }
为什么要这么改?
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE):JFrame默认的关闭操作是EXIT_ON_CLOSE,会直接终止程序,这样你的windowClosing方法可能还没执行就结束了。改成DO_NOTHING_ON_CLOSE后,程序会等待监听器处理关闭事件,再由你手动调用System.exit(0)退出。addWindowListener(new CloseTheWindow()):这一步是把你的关闭逻辑和窗口绑定起来,告诉窗口“当我关闭的时候,要执行这个内部类里的方法”。setVisible(true):如果忘了这一步,窗口根本不会显示出来,自然也测试不了关闭逻辑啦。
现在运行代码,关闭窗口的时候就能看到控制台打印出你想要的文本啦!
内容的提问来源于stack exchange,提问作者Jojo
相关产品推荐
相关产品推荐

