gpt4 book ai didi

java - 不一致的 keyPressed 事件 : sometimes fires, 有时不会,重新启动程序而不更改任何内容,它可能或现在可以工作

转载 作者:搜寻专家 更新时间:2023-11-01 01:22:48 25 4
gpt4 key购买 nike

好吧,所以我在这里很沮丧。这里的这段代码只是一个非常简单的移动JComponent。

奇怪的是,当我完全不做任何更改时,keyPressed 事件会出现难以置信的不一致。我启动程序,有时它会运行,我的球会在屏幕上移动。另一方面,我将关闭它并在不更改任何内容的情况下打开它,但它会无法工作。我不认为焦点在这里是一个问题,虽然我真的不太了解它。我不知道发生了什么。

如有任何帮助,我们将不胜感激。我只是不明白这个程序怎么会如此不一致地失败和成功。

这是我在角色类中的代码,因为我不认为只给你一个片段会有帮助。我不知道是我一个人,还是其他什么人,但如果你想编译它看看,请继续。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class Character extends JComponent implements KeyListener
{
Timer timer = new Timer(5, new TimeListener());
private int x = 250;
private int y = 300;
char whichTimer;


public Character()
{
addKeyListener(this);
setFocusable(true);
requestFocusInWindow();
repaint();
}

public void keyReleased(KeyEvent e)
{
if(e.getKeyCode() == KeyEvent.VK_W)
{
timer.stop();
}
if(e.getKeyCode() == KeyEvent.VK_A)
{
timer.stop();
}
if(e.getKeyCode() == KeyEvent.VK_S)
{
timer.stop();
}
if(e.getKeyCode() == KeyEvent.VK_D)
{
timer.stop();
}
}
public void keyPressed(KeyEvent e)
{

if(e.getKeyCode() == KeyEvent.VK_W)
{
timer.stop();
whichTimer = 'W';
timer.start();
}

if(e.getKeyCode() == KeyEvent.VK_A)
{
timer.stop();
whichTimer = 'A';
timer.start();
}
if(e.getKeyCode() == KeyEvent.VK_S)
{
timer.stop();
whichTimer = 'S';
timer.start();
}
if(e.getKeyCode() == KeyEvent.VK_D)
{
timer.stop();
whichTimer = 'D';
timer.start();
}
}
public void keyTyped(KeyEvent e)
{

}
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;

// g2d.drawImage(fatsprite, x-10, y-10, null);
g.setColor(Color.BLACK);
g.fillOval(x-10, y-10, 20, 20);

}

class TimeListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(whichTimer == 'W')
{
y-=1;
repaint();
}
if(whichTimer == 'A')
{
x-=1;
repaint();
}
if(whichTimer == 'S')
{
y+=1;
repaint();
}
if(whichTimer == 'D')
{
x+=1;
repaint();
}
}

}
}

最佳答案

确保组件是可聚焦的并且有焦点。此外,最好使用键绑定(bind),请参阅 How to Use Key Bindings更多细节。

关于java - 不一致的 keyPressed 事件 : sometimes fires, 有时不会,重新启动程序而不更改任何内容,它可能或现在可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11805514/

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