Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
34 / 34 / 21
Регистрация: 22.09.2013
Сообщений: 401

Определения нажатия стрелочки на клавиатуре

21.03.2016, 08:19. Показов 4035. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, несколько дней назад начал изучать JAVA. Решил сделать игру змейка. Собственно возник вопрос, как реализовать взаимодействие с клавиатурой? Сейчас сделал так

public class Game extends JPanel implements ActionListener{

...


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Конструктор класса Game
    public Game()
    {
        t.start();
        addKeyListener(new Keyboard());
        setFocusable(true);
    }
 
    //Работа с клавиатурой
    private class Keyboard extends KeyAdapter
    {
        public void KeyPressed(KeyEvent k)
        {
            int Key = k.getKeyCode();
            if(Key == KeyEvent.VK_RIGHT & s.moveto != 2) { s.moveto = 0; JOptionPane.showMessageDialog(null, "alert");}
            if((Key == KeyEvent.VK_DOWN) & s.moveto != 3) s.moveto = 1;
            if((Key == KeyEvent.VK_LEFT) & s.moveto != 0) s.moveto = 2;
            if((Key == KeyEvent.VK_UP) & s.moveto != 1) s.moveto = 3;
        }
    }
}
Приложение запускается без ошибок, но на нажатие клавиш не реагирует ((

Добавлено через 11 часов 26 минут
Может привести более подробный код?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.03.2016, 08:19
Ответы с готовыми решениями:

Эмуляция нажатия клавиши на клавиатуре
Эмуляция нажатия клавиши на клавиатуре - я передаю окну через sendmessenge - но оно водит тока 1 букву первую и всю.

Ловля нажатия клавишь на клавиатуре
Привет. Вот процедура ловли клавишь на клавиатуре: procedure TForm1.WMKeyDown(var Msg: TWMKeyDown); begin if...

Имитация нажатия клавиши на клавиатуре
Добрый день! Передо мной встал вот такой вопрос, который решить у меня не получается. Прошу помощи у знающих пользователей. Собственно...

6
 Аватар для iars
6 / 6 / 7
Регистрация: 19.03.2016
Сообщений: 50
21.03.2016, 08:50
Java
1
if(Key == KeyEvent.VK_RIGHT & s.moveto != 2)
в
Java
1
if(Key == KeyEvent.VK_RIGHT && s.moveto != 2)
во всех условиях.
0
34 / 34 / 21
Регистрация: 22.09.2013
Сообщений: 401
21.03.2016, 09:42  [ТС]
Знаю что правильно && просто где то видел и такое И, а в этом коде просто забыл исправить, но не с & не с && код не отрабатывает, пробовал просто
Java
1
if(Key == KeyEvent.VK_RIGHT) JOptionPane.showMessageDialog(null, "alert");
Все равно не срабатывает (
0
 Аватар для iars
6 / 6 / 7
Регистрация: 19.03.2016
Сообщений: 50
21.03.2016, 09:48
Sluchayno, хм, значит, проверяйте, всё ли у вас в порядке с s.moveto. Да, вроде, нужно писать implements KeyListener, а не наследоваться от KeyAdapter.
0
34 / 34 / 21
Регистрация: 22.09.2013
Сообщений: 401
21.03.2016, 21:06  [ТС]
Блин, я же написал, я вообще исключал s.moveto результат тот же ((

Добавлено через 8 часов 57 минут
Я уже всю голову сломал. Не понимаю в чем дело ( Выкладываю весь код

Game.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package Snake;
 
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
 
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.Timer;
 
public class Game extends JPanel implements ActionListener{
 
    /**
     * 
     */
    //Че это такое я не знаю.
    private static final long serialVersionUID = 1L;
        
    static final int Size = 32;
    static final int Width = 640;
    static final int Heigth = 480;
    //Скорость обновления таймера
    static final int Speed = 200;
    //Сощдаем класс SnakeBody
    SnakeBoby s = new SnakeBoby(10, 10);
    //Таймер
    Timer t = new Timer(Speed, this);
 
    //Конструктор класса Main
    public Game()
    {
        t.start();
        addKeyListener(new Keyboard());
        setFocusable(true);
    }
    
    //Главная форма на которой создается фрейм(Форма)
    public static void main(String[] args)
    {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setResizable(false);
        f.setSize(Width, Heigth);
        f.setTitle("Моя ЗЗЗЗЗЗЗЗМЕЙКА");
        f.setLocationRelativeTo(null);
        f.add(new Game());
        f.setVisible(true);
    }
 
    //Процедура отрисовки чего либо (я так понимаю она фактически стандартная)
    public void paint(Graphics g)
    {
        g.setColor(c(0, 100 ,0));
        g.fillRect(0, 0, Width, Heigth);
        
    
        for(int i = 0; i < s.SnakeLength; i ++)
        {
            g.setColor(c(0, 255, 0));
            g.drawRoundRect(s.SnakeX[i]*Size, s.SnakeY[i]*Size, Size, Size, 5, 5);
        }
        
    }
    
    //Функция которая возврощает цвет по заданым RGB
    public Color c(int Red, int Green, int Blue)
    {
        return new Color(Red, Green, Blue);
    }
 
    //Какая то конструкция от таймера 
    @Override
    public void actionPerformed(ActionEvent e) {
        s.Move();
        
        repaint();
    }
    
//Работа с клавиатурой
    private class Keyboard extends KeyAdapter
    {
        public void KeyPressed(KeyEvent k)
        {
            int Key = k.getKeyCode();
            if((Key == KeyEvent.VK_RIGHT) && s.moveto != 2)  s.moveto = 0;
            if((Key == KeyEvent.VK_DOWN) && s.moveto != 3) s.moveto = 1;
            if((Key == KeyEvent.VK_LEFT) && s.moveto != 0) s.moveto = 2;
            if((Key == KeyEvent.VK_UP) && s.moveto != 1) s.moveto = 3;
        }
    }
}
SnakeBody
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package Snake;
 
public class SnakeBoby {
    byte moveto = 0;
    int SnakeLength = 3;
    int SnakeX[] = new int[100];
    int SnakeY[] = new int[100];
    
    
    //Констурктор класса
    public SnakeBoby(int x, int y)
    {
        SnakeX[0] = x;
        SnakeY[0] = y;
        
        for(int i = 0; i < SnakeLength; i++) 
        {
            SnakeX[i] = x+i;
            SnakeY[i] = y;
        }
    }
    
    public void Move()
    {
        for(int i = SnakeLength; i > 0; i--)
        {
            SnakeX[i] = SnakeX[i-1];
            SnakeY[i] = SnakeY[i-1];
        }
        
        switch(moveto) {
        case 0: 
            SnakeX[0]++;
            break;
        case 1: 
            SnakeY[0]++;
            break;
        case 2: 
            SnakeX[0]--;
            break;
        case 3: 
            SnakeY[0]--;
            break;
        default:            
            break;
    }
    }
}
0
 Аватар для Aliara
18 / 18 / 13
Регистрация: 18.06.2015
Сообщений: 79
21.03.2016, 23:46
У вас неправильно назван метод.
Java
1
public void KeyPressed(KeyEvent k)
заменить на
Java
1
public void keyPressed(KeyEvent k)
0
34 / 34 / 21
Регистрация: 22.09.2013
Сообщений: 401
23.03.2016, 06:13  [ТС]
Ох уж моя не внимательность....
Большое спасибо Aliara
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.03.2016, 06:13
Помогаю со студенческими работами здесь

Имитация нажатия клавиши на клавиатуре
Имитирую нажатия клавиши - Ctrl+V(ПРобывал и покнопочную иметацию каждой буквы текта.) Суть в том что в WebBrowser на сайте ВК на стеночке...

Помогите с эмуляцией нажатия клавиш на клавиатуре!!!
ЛЮДИ спасите написал прогу которая эмулирует нажатие клавиш на клаве а она не пашет посмотрите что не так пожлуста) вот код по идее он...

Процедура обработки нажатия клавиши на клавиатуре
Нужно чтоби при нажатии комбинации клавиш, или просто клавиши стартовала процедура.

Эмулирования нажатия клавиши на клавиатуре C++ Builder 6.0
Пишу маленького бота... Который просто делает определённый действия такие как: 1) Нажатия TAB потом '1' потом TAB 2) Нажатия ENTER...

Игнорирование нажатия на клавиатуре кнопок Enter и Space
Помогите пожалуйста с написанием одной программы... Мне нужно сделать так, чтобы нажатия кнопок Enter и Space игнорировалось. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru