java applet中的'Abstract'标签

时间:2014-07-31 06:51:20

标签: java applet awt actionlistener mouselistener

我正在编写一个小程序,它将显示按钮上的鼠标点击次数,另一个小程序将显示鼠标单击的坐标并将背景颜色更改为随机颜色。

在这两种情况下,我都遇到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)));
}}

提前致谢!

2 个答案:

答案 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>