问题描述
我正在尝试从 KeyEvent
中捕获向上、向下、向右、向左键,当我按下某个键时收到以下消息:
2021-06-05 00:46:11.176 java[47646:1823153] TSM AdjustCapsLockLEDForKeyTransitionHandling - _ISSetPhysicalKeyboardCapsLockLED 抑制
这是我的代码:
Character.java
import java.awt.Image;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
public class Character {
private int dx;
private int dy;
private int x;
private int y;
private String imageLocation;
private Image image;
private boolean moveable;
public Character(int x,int y,String imgLoc,boolean m){
this.x = x;
this.y = y;
imageLocation = imgLoc;
ImageIcon ii = new ImageIcon(this.getClass().getResource(imageLocation));
image = ii.getimage();
moveable = m;
}
public void move() {
if(moveable){
x += dx;
y += dy;
}
}
public boolean moveable(){
return moveable;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public Image getimage() {
return image;
}
public void keyPresed(KeyEvent e){
int key = e.getKeyCode();
if(key == KeyEvent.VK_LEFT){
System.out.println("left key pressed");
dx = -1;
}
if(key == KeyEvent.VK_RIGHT){
dx = 1;
}
if(key == KeyEvent.VK_UP){
dy = -1;
}
if(key == KeyEvent.VK_DOWN){
dy = 1;
}
}
public void keyreleased(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT) {
dx = 0;
}
if (key == KeyEvent.VK_RIGHT) {
dx = 0;
}
if (key == KeyEvent.VK_UP) {
dy = 0;
}
if (key == KeyEvent.VK_DOWN) {
dy = 0;
}
}
}
** 添加:**
休息室.java
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Lounge extends JPanel implements ActionListener{
private Timer timer;
private Player player;
public Lounge(){
//addKeyListener(new TAdapter());
setFocusable(true);
setBackground(Color.BLACK);
setDoubleBuffered(true);
player = new Player(1000,40);
timer = new Timer(5,this);
timer.start();
}
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(player.getimage(),player.getX(),player.getY(),this);
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
@Override
public void actionPerformed(ActionEvent e) {
player.move();
repaint();
}
private class TAdapter extends KeyAdapter{
public void keyreleased(KeyEvent e){
player.keyreleased(e);
}
public void keypressed(KeyEvent e){
player.keyreleased(e);
}
}
}
Main.java
import javax.swing.JFrame;
public class Main extends JFrame{
public Main(){
add(new Lounge());
setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
setSize(1280,720);
setLocationRelativeto(null);
setTitle("Be My Guest");
setResizable(false);
setVisible(true);
}
public static void main(String[] args) {
new Main();
}
}
我在 MacBook pro 2017 上使用 Visual Studio Code
请帮帮我!
解决方法
我认为问题在于最初按下了 Caps-Lock 键,我在 here 上发现了类似的问题
我发现的另一个问题是方法 keyPressed
被错误地拼写为 keyPresed
,这也可能导致一些问题