【发布时间】:2014-01-16 03:26:52
【问题描述】:
为什么我会从下面的代码中收到此编译错误消息?
(程序根据按下的箭头键在 4 个方向上移动一个箭头 在键盘上:d)
Direction.java:41:错误:DirectionPanel.DirectionListener 不是 抽象且不覆盖抽象方法 keyReleased(KeyEvent) 在 KeyListener 中
private class DirectionListener implements KeyListener {
//Direction.java
import javax.swing.*;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
class DirectionPanel extends JPanel {
private final int WIDTH = 300, HEIGHT = 200;
private final int JUMP = 10; //increment for image movement
private final int IMAGE_SIZE = 31;
private ImageIcon up, down, right, left, currentImage;
private int x, y;
//constructor:
public DirectionPanel () {
addKeyListener (new DirectionListener());
x =WIDTH / 2;
y = HEIGHT / 2;
up = new ImageIcon ("arrowUp.gif");
down = new ImageIcon ("arrowDown.gif");
left = new ImageIcon ("arrowLeft.gif");
right = new ImageIcon ("arrowRight.gif");
currentImage = right;
setBackground (Color.black);
setPreferredSize (new Dimension(WIDTH, HEIGHT));
setFocusable(true);
}
//draws
public void paintComponent (Graphics page) {
super.paintComponent (page);
currentImage.paintIcon (this, page, x, y);
}
//represents the listener for keyboard activity
private class DirectionListener implements KeyListener {
public void keyPressed (KeyEvent event) {
switch (event.getKeyCode()) {
case KeyEvent.VK_UP:
currentImage = up;
y -= JUMP;
break;
case KeyEvent.VK_DOWN:
currentImage = down;
y += JUMP;
break;
case KeyEvent.VK_LEFT:
currentImage = left;
x -= JUMP;
break;
case KeyEvent.VK_RIGHT:
currentImage = right;
x += JUMP;
break;
}
repaint();
}
//empty definitions for unused methods
private void KeyTyped (KeyEvent event) {}
private void KeyReleased (KeyEvent event) {}
}
}
public class Direction {
public static void main (String[] args) {
JFrame frame = new JFrame ("Direction");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add (new DirectionPanel());
frame.pack();
frame.setVisible(true);
}
}
【问题讨论】:
-
您对错误信息有什么不明白的地方?这很清楚。字符大小写在 Java 中很重要,但您也不能降低方法的可见性。
-
啊哈哈,你非常'在球'Sotirios:我现在已经编译了但我不知道你所说的'降低方法的可见性'是什么意思-虽然(我可能应该开始一个新的问题)它现在编译,当我运行它时,我和我在黑屏上单击鼠标,我什么也看不到。代码是否还有其他问题,或者是我的鼠标有问题,因为它也发生在我尝试的最后一个 GUI 项目中。
-
如果接口将方法声明为
public,则不能在子类型中使用private。 -
好吧,我做了 keyTyped 和 keyReleased pulic
标签: java swing keylistener