java小程序中的“抽象”标签
我正在编写一个小程序,它将显示鼠标单击按钮的次数,另一个小程序将显示鼠标单击的坐标,并将背景颜色更改为随机颜色
在这两种情况下,我都遇到了BlueJ中的“不是抽象的,也不重写抽象方法”错误,我需要帮助理解我做错了什么。我对此非常陌生,因此欢迎提供任何提示/校对:)
以下是第一个小程序:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Option1 extends Frame implements ActionListener {
public void main (String[] args) {
int click = 0;
JFrame base = new JFrame ("Button Click Counter");
base.getContentPane().setLayout(null);
base.setSize(500,500);
base.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button = new JButton("Click Me!");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed (ActionEvent e) {
click++; }
});
JTextField count = new JTextField(click);
this.add(button);
this.add(count);
}}
坐标一:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Random;
public class Option2 extends Frame implements MouseListener {
double x;
double y;
public void init() {
addMouseListener(this);
JFrame base = new JFrame("Mouse Coordinates");
base.getContentPane().setLayout(null);
base.setSize(500,500);
base.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField answer = new JTextField(x + "," + y);
}
public void mouseClicked( MouseEvent e ) {
x = e.getX();
y = e.getY();
this.setBackground(new Color((int)(Math.random() * 0x1000000)));
}}
提前谢谢
# 1 楼答案
您正在实现一个接口
至少你在写作的时候会这么做
但是你没有遵守你的合同!如果你说你实现了ActionListener,那么你保证你有这个方法
但您的代码缺少此方法-这是您的错误消息
# 2 楼答案
Option1声明实现ActionListener接口:
如果一个类这样做,它必须是抽象的(Option1不是),或者它必须实现接口中声明的方法。当您查看API for ActionListener时,您会发现其中有一个方法:
您需要在选项1中实现此方法,例如
然后将选项1注册为ActionListener:
您尝试的是在匿名内部类中实现ClickListener,这也可以,但在本例中,Option1不能实现ActionListener
选项1中的main方法没有正确声明,通常是
但是在main方法中进行的初始化应该在构造函数中完成,或者(与Option2一样)在单独的方法中完成
Option2的问题在于,您只实现了从interface MouseListener中单击鼠标的方法。还有几项需要实施:
即使您不想处理这些事件,也需要使用空方法
最后一点提示:我不知道您的IDE,但许多IDE(Eclipse、Netbeans、IntelliJ)都有一个选项,可以为您的接口生成所需的方法,这节省了大量的键入工作;)