java - 在Java中添加KeyListener?

标签 java keylistener

在我的简单程序中,球的起点是x=0, y=0。还设置了一个计时器,在每个计时器操作中,x 增加 a,y 增加 b。 a 和 b 的初始值都是 1。这样就可以了:运行程序 Moving1.java 时,球从框架的上、左移动到右、下。

但是,我也尝试添加 KeyEvents,以便可以更改 KeyEvents 中 a 和 b 的值,但它们不起作用。由于某种原因,程序似乎不会执行任何 KeyEvent。如何修复?主 KeyEvent 是 keyPressed,但我已将 b = 0 写入每个 KeyEvent,它应该对球的方向生效。

如果有人可以帮助我解决这个问题,我想我可以向 keyPressed Event 添加正确的软件,例如:

public void keyPressed (KeyEvent e) {
    int KeyCode = e.getKeyCode();
    if (KeyCode == KeyEvent.VK_LEFT) {
        a = -1;
        b = 0;
    }
}

等等。

但这是我的代码:

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

public class Moving1 extends JPanel implements KeyListener {
    int x, y;
    int a = 1, b = 1;
    Timer timer;


    public Moving1() {
        x = 0;
        y = 0;
        timer = new Timer(30, new TimerListener());
    }

    private class TimerListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            x += a; // add horizontal
            y += b; // add vertical
            repaint();
        }
    }

    public void keyPressed(KeyEvent e) {
        b = 0;
    }

    public void keyReleased(KeyEvent e) {
        b = 0;
    }

    public void keyTyped(KeyEvent e) {
        b = 0;
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.fillOval(x, y, 10, 10);
    }

    public static void main(String[] args) {
        JFrame f = new JFrame("Moving1");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Moving1 m = new Moving1();
        f.add(m);
        f.setSize(500, 500);
        f.setVisible(true);
        m.timer.start();
    }
}

最佳答案

您没有将 KeyListener 添加到任何内容,因此它无法处理任何事件。将以下行放入主程序中,这样事件就会发生。

f.addKeyListener(m);

关于java - 在Java中添加KeyListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44024211/

相关文章:

java - 如何遍历字符串数组并列出新 int 数组中的所有数字并将单词保留在字符串数组中

java - 无法与 derby 客户端 jdbc 驱动程序建立连接

java - 如何在java swing中触发keyReleased事件

android - 在 Android 中使用虚拟键盘捕捉按键?

java - 带数字键盘的按键监听器?

java - case-statement 或 if-statement 效率视角

Java字符串如何替换 "with\"以转义JSON?

java - Java 中的原始类

java - 在 Java 中使用 KeyListener

java - JTextArea 的输入