Добавление KeyListener в Java

Это небольшая игра. Здесь я сделал 2 прямоугольника одинакового размера. Я хочу перемещать их всякий раз, когда человек нажимает клавишу на клавиатуре. Но я не знаю, как добавить KeyListener. Я просмотрел здесь предыдущие ответы, но не смог уловить свою ошибку. Я даже искал в Google, но понятия не имею. Это мой код:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class PongGame extends JComponent implements ActionListener {
    int ballX = 200;
    int ballY = 340;
    short ballX_Direction = 1;
    short ballY_Direction = 1;
    static int Direction1 = 300;
    static int Direction2 = 300;
    private static keyListener move;
    public static void main(String[] args) {
        JFrame frame = new JFrame("Pong Game");        
        PongGame game = new PongGame();
        frame.add(game);
        frame.pack();
        frame.setSize(900,700);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setResizable(false);
        Timer t = new Timer(2,game);
        t.start();
    }            
    public void paintComponent(Graphics g) {
        g.setColor(new Color(0,242,237));
        g.fillRect(0,0,900,700);
        g.setColor(Color.black);int a = 60;
        for(int i = 1;i<=5;i++) {
            g.fillRect(444,0+a,12,65);
            a = a+125;
        }
        g.setColor(Color.blue);
        g.fillRect(100,Direction2,15,100);
        g.fillRect(770,Direction1,15,100);
        g.setColor(Color.red);
        g.fillOval(ballX,ballY,20,20);
        repaint();
    }
    public void actionPerformed(ActionEvent e) {
        ballX = ballX + ballX_Direction;
        ballY = ballY + ballY_Direction;      
        if (ballY >= 660) ballY_Direction = -1;
        if (ballY <= 0) ballY_Direction = 1;

        if (ballX >= 444-20 && ballY >= 60-20 && ballX <= 444-20 && ballY <= 185-20) {
            ballX_Direction = -1;
        }
        if (ballX >= 444-20 && ballY >= 185-20 && ballX <= 444-20 && ballY <= 250-20) {
            ballX_Direction = -1;
        }
        if (ballX >= 444-20 && ballY >= 250-20 && ballX <= 444-20 && ballY <= 375-20) {
            ballX_Direction = -1;
        }
        if (ballX >= 444-20 && ballY >= 375-20 && ballX <= 444-20 && ballY <= 500-20) {
            ballX_Direction = -1;
        }
        if (ballX >= 444-20 && ballY >= 500-20 && ballX <= 444-20 && ballY <= 625-20) {
            ballX_Direction = -1;
        }
        repaint();
    }        
}

class keyListener implements KeyListener {
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_UP) 
        {
            PongGame.Direction1 = PongGame.Direction1 - 25
        }
        if (key == KeyEvent.VK_DOWN) 
        {
            PongGame.Direction1 = PongGame.Direction1 - 25;
        }
        if (key == '1') 
        {
            PongGame.Direction2 -= 25;
        }
        if (key == '4') 
        {
            PongGame.Direction2 += 25;
        }
    }
    public void keyReleased(KeyEvent e) {}  
    public void keyTyped(KeyEvent e) {}  
}    

Пожалуйста, отформатируйте свой код правильно в следующий раз.

hellow 08.08.2018 13:44

Если вы новичок в Java, вам лучше начать с изучения основ. А пока поищите в своем приложении компонент пользовательского интерфейса, который может прослушивать KeyListener. в своем коде попробуйте this.addKeyListener (new keyListener ());

Stultuske 08.08.2018 13:46

Поскольку вы уже нашли интерфейс KeyListener, разве документация не говорит вам, как его использовать? Кстати, «Я новичок в Java» (который был удален при редактировании) - я бы посоветовал вам начать с менее сложных задач по изучению языка. Вы в основном пытаетесь делать 10 шагов за раз, что обязательно приведет вас к еще большей головной боли.

Thomas 08.08.2018 13:46

Вам нужно добавить KeyListener в настраиваемую часть графического интерфейса, которая затем может реагировать на него.

XtremeBaumer 08.08.2018 13:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В JFrame есть метод для этого:

frame.addKeyListener(new keyListener());

Его необходимо добавить в часть графического интерфейса пользователя, в частности в часть, имеющую фокус, поскольку именно это ОС сообщает о вводе.

Возможно, вам также следует объяснить, почему его нужно добавить в часть графического интерфейса.

XtremeBaumer 08.08.2018 13:46

@XtremeBaumer лучше?

kutschkem 08.08.2018 13:51

Другие вопросы по теме