gpt4 book ai didi

java KeyListener 没有响应?

转载 作者:行者123 更新时间:2023-12-01 13:04:53 25 4
gpt4 key购买 nike

我有这个代码,绿色方 block 是要移动的,但我并没有做对所有事情。只是按键听似乎没有反应。我认为有一个错误

addKeyListener(this);在我的 Graphics 类的 PaintComponent 中,您能帮忙告诉我如何修复它以及出了什么问题吗?

我的主课

   import javax.swing.JFrame;

public class Main {

static int v = 50;
static int t = 1;
public static void main(String[] args) {
JFrame frame = new JFrame("window");
frame.setVisible(true);
frame.setSize(400,200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Graphics object = new Graphics();

frame.add(object);
while (v > t){
object.Drawing();
}
}
}

我的图形类

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

import javax.swing.*;

public class Graphics extends JPanel implements KeyListener {

int x = 0, y= 0, xx = 100, yy = 0, ltyx = 0, ltyyxx = 0, px = 0, py = 0;

public void Drawing(){
repaint();
}

public void paintComponent (java.awt.Graphics g){
super.paintComponent (g);
addKeyListener(this);
setBackground(Color.WHITE);
g.setColor(Color.GREEN);
g.fillRect(px, py, 25, 25);
g.setColor(Color.BLUE);
g.fillRect(x, y, 50, 50);
g.setColor(Color.RED);
g.fillRect(xx, yy, 50, 50);
g.drawString("times looped around screen Blue : " + ltyx , 10, 10);
g.drawString("Red : " + ltyyxx , 170, 20);

x++;
xx++;
if (x > 400){
x = 0;
y += 50;
}
if (xx > 400){
xx = 0;
yy += 50;
}
if (y > 200){
y = 0;
ltyx++;
}
if (yy > 200){
yy = 0;
ltyyxx++;
}
}

public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()){
case KeyEvent.VK_RIGHT:{
px++;
break;
}
case KeyEvent.VK_LEFT:{
px--;
break;
}
case KeyEvent.VK_UP:{
py++;
break;
}
case KeyEvent.VK_DOWN:{
py--;
break;
}
}
}

public void keyReleased(KeyEvent e) {
switch(e.getKeyCode()){
case KeyEvent.VK_RIGHT:{
px = 0;
break;
}
case KeyEvent.VK_LEFT:{
px = 0;
break;
}
case KeyEvent.VK_UP:{
py = 0;
break;
}
case KeyEvent.VK_DOWN:{
py = 0;
break;
}
}
}

public void keyTyped(KeyEvent e) {

}

}

最佳答案

在用户界面中有“焦点”的概念。只有当前持有焦点的组件才能直接接收按键事件。例如,在打字时,屏幕上的一个文本框会做出响应,而不会响应任何其他文本框。

frame.add(object);之后,添加:

object.setFocusable(true);
object.requestFocusInWindow();

此外,addKeyListener(this); 调用的位置完全错误。每次绘制组件时,它都会添加另一个关键监听器。它应该只被调用一次,最好是在面板的构造函数中。

关于java KeyListener 没有响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23342549/

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