我正在编写一个小程序,它将显示按钮上的鼠标点击次数,另一个小程序将显示鼠标单击的坐标并将背景颜色更改为随机颜色。
在这两种情况下,我都遇到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)));
}}
提前致谢!
答案 0 :(得分:0)
您正在实施一个界面......
至少你代表你在写
时这样做public class Option1 extends Frame implements ActionListener
但是你没有保留合同!如果你说你实现了ActionListener,那么你保证你有这个方法
public void actionPerformed(ActionEvent e) {
}
但您的代码缺少此方法 - 这是您的错误消息......
答案 1 :(得分:0)
Option1声明实现ActionListener接口:
public class Option1 extends Frame implements ActionListener {
如果一个类这样做,它必须是abstract(不是Option1)或者它必须实现接口中声明的方法。当您查看API for ActionListener时,您会在那里找到一种方法:
void actionPerformed(ActionEvent e)
您需要在Option1中实现此方法,例如
@Override
public void actionPerformed(ActionEvent e) {
click++;
}
然后将Option1注册为ActionListener:
button.addActionListener(this);
您尝试过的是在匿名内部类中实现ClickListener,这也没关系,但在这种情况下,Option1不能实现ActionListener。
您在Option1中的主要方法未正确声明,主要方法通常是
public static void main(String[] args)
但是你在main方法中做的初始化应该在构造函数中完成,或者(与Option2一样)在单独的方法中完成
public class Option1 extends Frame implements ActionListener {
private int click = 0;
public Option1() {
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(this);
JTextField count = new JTextField(click);
this.add(button);
this.add(count);
}
@Override
public void actionPerformed(ActionEvent e) {
click++;
}
}
Option2的问题是你只能从interface MouseListener实现mouseClicked方法。还有其他几个需要实施:
void mouseEntered(MouseEvent e)
void mouseExited(MouseEvent e)
void mousePressed(MouseEvent e)
void mouseReleased(MouseEvent e)
即使您不想处理这些事件,也需要使用空方法。
最后一个提示:我不了解您的IDE,但许多IDE(Eclipse,Netbeans,IntelliJ)都可以选择为您生成所需的接口方法,从而节省了大量的输入;)< / p>