gpt4 book ai didi

java - 从外部 Jar 添加 KeyEventListener 到 JFrame?

转载 作者:行者123 更新时间:2023-12-01 11:50:19 25 4
gpt4 key购买 nike

我这里有一个类(class)项目,我必须制作一个可以运行的小行星游戏。现在我一直致力于让关键事件得到认可。我已经阅读和观看了教程并让它们发挥作用,但在这种环境中实现同样的事情并没有帮助。我希望也许有人可以引导我走向正确的方向。

这是使用关键操作方法实现 KeyListener 的主类,它创建了我的 Ship 对象并设置了一个“沙箱”。 “沙盒”是显示对象的 Jframe。 “Sandbox”是从我在类里面收到的外部 jar 以及“blobfx.jar”中的其他内容导入的。

package Asteroid;

import java.util.Random;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import blobfx.SandBox;
import blobfx.SandBoxMode;



public class AsteroidMain implements KeyListener{
// ^^^^^^^^^^^^ currently has error: "The type AsteroidMain must implement the inherited abstract method KeyListener.keyPressed(KeyEvent)"

private static Random random = new Random();

public static void main(String[] args) {


SandBox sb = new SandBox();
sb.setFrameRate(66);
// makes window for objects at frame rate of 15


Ship shipThing = new Ship();
sb.addBlob( shipThing );
// makes ship object then adds it to the window

SandBox.simulate(sb);
// draws the objects on screen

}

@Override
public void keyPressed(KeyEvent e, Ship shipThing) {
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ currently has error: "The method keyPressed(KeyEvent, Ship) of type AsteroidMain must override or implement a supertype method"
if(e.getKeyCode() == 38){
shipThing.moveForward();
System.out.println("KEY PRESSED");
}

}

@Override
public void keyReleased(KeyEvent e) {

}


@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}
}

这是我的 Ship 类,我希望在按下 UP 键时继续前进。

package Asteroid;

import java.lang.Math;

import blobfx.PolyBlob;


public class Ship extends PolyBlob{

private double angle = 0.0;
private final double delta = 0.15;
private final double speed = 5.0;


public Ship( ){

super(0,0,0);

int x[] = {10, -10, -5, -10};
int y[] = { 0, -7, 0, 7};
setPolygon( x, y );
// sets vertices that draws the ship polygon

setLoc( 200, 200 );

}

public void moveForward(){

System.out.println( "MOVING FORWARD");

setLoc( getLoc().x + (int) Math.round(speed * Math.cos(angle)),
getLoc().y + (int) Math.round(speed * Math.sin(angle))
);
}

public void turnLeft(){

}

public void turnRight(){

}


}

最佳答案

首先查看 KeyListener 的 JavaDocs

您未实现keyPressed(KeyEvent),从而违反了接口(interface)的契约(Contract)要求。

这个...

@Override
public void keyPressed(KeyEvent e, Ship shipThing) {

应该给你一个编译器错误,告诉你你没有重写一个方法,它应该是

@Override
public void keyPressed(KeyEvent e) {

您不能只是“发明”参数,接口(interface)描述了任何实现都必须满足的预期要求

话虽如此,我强烈建议不要使用 KeyListener 而是使用 Key Bindings API,请参阅 How to Use Key Bindings了解更多详情

关于java - 从外部 Jar 添加 KeyEventListener 到 JFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28847380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com