Обработчик событий нажатий на клавиши

160
22 сентября 2019, 09:50
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

// Класс окна, в котором размещено игровое поле
class okno extends JFrame
{   
private pole gameP; // Закрытая Переменная класса - игровое поле
// Обработчик событий нажатий на клавиши
private class myKey implements KeyListener  
{
        // Метод, который срабатывает при нажатии
        public void keyPressed(KeyEvent e)
        {
            // Получение кода нажатой клавиши
            int key_ = e.getKeyCode();                      
            else if ((key_==39)&(key_==16)) // 39 - вправо 16 - шифт
            {
                gameP.y += 30;
                gameP.x += 30;
            }
        }
        public void keyReleased(KeyEvent e) {}
        public void keyTyped(KeyEvent e) {}
}
}

Не получается пустить объект по диагонали при нажатии shift и стрелки вправо, в чем ошибка?

Answer 1

Проблема в том, что keyPressed обрабатывает только одно нажатие, т.е. (key_==39)&(key_==16) всегда ложно, так как оно либо 39, либо 16, либо любой другой код, но не два и более одновременно. Вам необходимо фиксировать нажатые клавиши в структуре.

private class myKey implements KeyListener  
{
    private final Set<Integer> activeKeys = new HashSet<Character>();
    private final List<Integer> keyCodes = List.of(16,39);
    @Override
    public synchronized void keyPressed(KeyEvent e) {
        activeKeys.add(e.getKeyCode());
        if (activeKeys.size() > 1 && keyCodes.stream().allMatch(k->set.contains(k))) {
            gameP.y += 30;
            gameP.x += 30;
        }
    }
    @Override
    public synchronized void keyReleased(KeyEvent e) {
        activeKeys.remove(e.getKeyCode());
    }
    @Override
    public void keyTyped(KeyEvent e) {}
}
READ ALSO
Google SignInIntent корректно ли работает resultCode?

Google SignInIntent корректно ли работает resultCode?

В android приложении используется авторизация через Google(firebase)Я получая извещение, что у некоторых пользователей не проходит авторизация

151
Метод для удаления (Spring + Postgresql)

Метод для удаления (Spring + Postgresql)

Весь код я разбит на разные слои:

199
Как я могу использовать массив из файлов ресурсов java [закрыт]

Как я могу использовать массив из файлов ресурсов java [закрыт]

У меня есть большой массив, больше 64кб, я хочу закинуть его в ресурсы и юзать оттуда, как мне это сделать? Спасибо!

169