java - 监听器和适配器有什么区别?

标签 java swing awt adapter listeners

我试图区分监听器和适配器。

它们是否几乎相同,但在监听器中您必须实现接口(interface)中的所有方法,但使用适配器您可以选择只实现您需要的方法,这样代码就更简洁、更易于阅读?

我还被告知适配器只能通过一种实现来实现实例化,而您不能实例化监听器,我不完全理解这一点。

谁能解释一下哪一个更好用,以及你可以用一个做什么但你不能用另一个?

最佳答案

WindowListenerinterface这迫使你 override所有方法,而 WindowAdapterWindowListener 的实现你只需要override您有兴趣处理的方法。

WindowListener是接口(interface),这意味着您无法实例化 WindowListener , 而 WindowAdapter是可以使用的具体类new运算符实例化。

当您使用 WindowAdapter 时,代码更干净,你的类只覆盖你想要的方法。 例如:

窗口监听器

public class CloseListener implements WindowListener {
    // im not interest  on this event, but still need to override it
    @Override
    public void windowOpened(WindowEvent e) {

    }
    // im not interest  on this event, but still need to override it    
    @Override
    public void windowClosing(WindowEvent e) {

    }

    @Override
    public void windowClosed(WindowEvent e) {
        System.exit(0);

    }
    // im not interest  on this event, but still need to override it    
    @Override
    public void windowIconified(WindowEvent e) {

    }
    // im not interest  on this event, but still need to override it
    @Override
    public void windowDeiconified(WindowEvent e) {

    }

}

窗口适配器

使用适配器时代码更简洁:

// at JFrame class
addWindowListener(new CloseListener());

// reusable Close Listener
public class CloseListener extends WindowAdapter {
    @Override
    public void windowClosed(WindowEvent e) {
        System.exit(0);
    }
}

或者

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

所以我建议使用 WindowAdapter ,但不是必须遵循。不过两个API差不多的只是WindowAdapter存在是为了方便创建监听器对象。

编辑:

自从 WindowListenerinterface ,您可以在您的 JFrame 子类中实现它。

public class MainWindow extends JFrame implements WindowListener {
    // this is ok
}
public class MainWindow extends JFrame, WindowAdapter {
    // this is not allow
}

但是你不能用 WindowAdapter .

关于java - 监听器和适配器有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10470104/

相关文章:

java - 按键事件不起作用 - java

java - 如何在单元格选择过程中同时设置单元格背景和小数格式

java - 在 Java 中高效地循环访问具有多个变量类型的对象数组

java - 如何在 JavaFX 中获取父节点中的所有节点?

java - 如果找不到元素,我该如何继续我的脚本?

java - 鼠标监听器无法与 Java 中的 JFrame 一起使用

java - 如何从对象数组中创建 GUI 列表?

java - 如何向 JTable 单元格添加下拉菜单

java - 如何在多显示器环境下全屏显示JFrame?

java - 当不再需要 DBCursor 时,我应该在方法中关闭它,还是可以将其留给垃圾收集器?