使用java.awt.*创建eventlistener,为什么它会强制您使用公共抽象作为类?

使用java.awt.*创建eventlistener,为什么它会强制您使用公共抽象作为类?,java,swing,events,awt,Java,Swing,Events,Awt,我正在读关于ActionListener。 我添加了implements关键字并导入了java.awt.event.*库 我遵循了示例和oracle Api,但出现以下错误: zx不是抽象的,并且不会覆盖java.awt.event.windowlistener中停用的抽象方法窗口(java.awt.event.windowevent) 它坚持要我将这个类公开为抽象类。 有人知道我为什么要这么做吗? 我所看到的所有示例并没有使它们的类抽象化 import javax.swing.*; impor

我正在读关于
ActionListener
。 我添加了
implements
关键字并导入了
java.awt.event.*

我遵循了示例和oracle Api,但出现以下错误:

zx不是抽象的,并且不会覆盖java.awt.event.windowlistener中停用的抽象方法窗口(java.awt.event.windowevent)

它坚持要我将这个类
公开为抽象类
。 有人知道我为什么要这么做吗? 我所看到的所有示例并没有使它们的类抽象化

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class zx extends JFrame implements WindowListener, ActionListener {

  public zx() {
    // create window
    super("title 2");
    setSize(100, 100);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);

    //container
    Container area = getContentPane();

    //layout manager
    GridBagLayout flowManager = new GridBagLayout();
    GridBagConstraints pos = new GridBagConstraints();
    area.setLayout(flowManager);

    //buttons
    JButton button1 = new JButton("1");
    pos.gridx = 20;
    pos.gridy = 11;
    area.add(button1, pos);

    JButton button2 = new JButton("2");
    pos.gridx = 15;
    pos.gridy = 11;
    area.add(button2, pos);

    JButton button3 = new JButton("3");
    pos.gridx = 4;
    pos.gridy = 4;
    area.add(button3, pos);

    JButton button4 = new JButton("4");
    pos.gridx = 2;
    pos.gridy = 2;
    area.add(button4, pos);

    JButton button5 = new JButton("5");
    pos.gridx = 0;
    pos.gridy = 0;
    area.add(button5, pos);
  }
}
并非所有的例子都将其抽象化

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class zx extends JFrame implements WindowListener, ActionListener {

  public zx() {
    // create window
    super("title 2");
    setSize(100, 100);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);

    //container
    Container area = getContentPane();

    //layout manager
    GridBagLayout flowManager = new GridBagLayout();
    GridBagConstraints pos = new GridBagConstraints();
    area.setLayout(flowManager);

    //buttons
    JButton button1 = new JButton("1");
    pos.gridx = 20;
    pos.gridy = 11;
    area.add(button1, pos);

    JButton button2 = new JButton("2");
    pos.gridx = 15;
    pos.gridy = 11;
    area.add(button2, pos);

    JButton button3 = new JButton("3");
    pos.gridx = 4;
    pos.gridy = 4;
    area.add(button3, pos);

    JButton button4 = new JButton("4");
    pos.gridx = 2;
    pos.gridy = 2;
    area.add(button4, pos);

    JButton button5 = new JButton("5");
    pos.gridx = 0;
    pos.gridy = 0;
    area.add(button5, pos);
  }
}
那么您应该按照示例所做的做,即实际实现
WindowListener
ActionListener
接口

从《如何编写ActionListener》中的简单示例开始,该示例可在上的Swing教程中找到。尝试实现WindowListener。然后尝试一个同时实现和ActionListener和WindowListener的类


此外,类名不应以小写字符开头。“zx”不遵循惯例。类名也应该更具描述性。下面的例子似乎有问题。我建议您花更多时间下载工作示例,然后在尝试学习新概念时对工作示例进行更改。这样,代码的结构会更好。

您必须使类抽象或实现接口所需的所有方法。如果您从抽象类或接口继承具体类,则需要提供每个抽象方法的实现。否则,您的实现类也需要是抽象的。我回滚了您的编辑,因为它删除了生成编译错误的代码段。实际上,发布的代码应该有多个编译错误,因为
WindowListener
ActionListener
接口中都没有实现任何方法。这是你的代码的精简版本吗?不,我试图保持它的简单性,并按照书中的说明去做,它没有精简。因此,由于没有找到一种方法,它会出现错误。这很有帮助。但是为什么所有的类都是抽象的,为什么不直接抛出错误而不是暗示它必须是抽象的呢?感谢Michael Myers做得这么好。
抽象
类不需要实现所有接口方法-未实现的方法隐式地成为
抽象
,实现它们成为具体子类的责任。只是编译器给了你两种可能的方法来解决这个错误:要么实现缺少的方法,要么让你的类
抽象化
。这是一个侮辱性的回答,如果我真的能实现它,那么我就不会读一本没有提到windowlistener的书了。您不应该评论类名,它们的临时占位符仅用于练习目的。没有官方的例子,只是我通过谷歌找到的,而且对于新手来说,它们往往太复杂了。你不应该带着不好的态度出现在这个论坛上,面对面你是不敢这么粗鲁的。@KyleHarris,
没有官方示例
-任何Swing组件的API都包含指向Swing教程的链接。如果你错过了,我还为你提供了一个链接。Swing教程包含学习Swing基础知识所需的所有示例。如果您阅读了本教程,但不理解该示例,那么您可以询问有关该示例的特定问题<代码>您不应该评论类名
-是的,我应该这样做。您要求我们阅读您的代码。代码应该遵循Java约定。论坛重点介绍了基于这些约定的代码。
我通过谷歌找到的东西,对于新手来说,它们往往太复杂。
-论坛中有很多简单的例子。我们的答案通常简单明了。因此,如果你不理解这个建议,你可以链接到你问题的答案,这样我们就可以更好地了解是什么让你困惑它没有提到windowlistener`-您的问题表明您正在阅读关于ActionListener的文章,那么为什么您的代码甚至引用了windowlistener?我给了你一些简单的建议,通过一次学习一个概念来保持代码的简单性。顺便说一句,我可以列出代码中的其他几个问题1)不要扩展JFrame,2)在EDT上创建GUI,3)不要使用setSize(),而是使用pack(),4)在将所有组件添加到框架后应调用setVisible(…),。但是,我建议您使用教程示例作为起点,学习如何用更好的设计编写应用程序。您提供了错误的建议,并将重点放在与问题无关的领域。提供指向不同示例的链接对我当前的示例没有帮助。它通过增加其他因素使事情变得更糟。我发现oracle API几乎无法阅读,因为它是由程序员为那些已经知道如何编程的人编写的。