Задать вопрос
Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (2)

Наибольший вклад в теги

Все теги (23)

Лучшие ответы пользователя

Все ответы (32)
  • Как связать KeyListener с gui в java?

    @Che_Bu_Rashka
    наверное добавить лисенер на саму форму окна приложения, тогда событие будет обрабатываться во всех случаях, когда окно приложения активно.

    frame.addKeyListener(new MyKey());

    И нахрена там 2 раза создается
    Snake s = new Snake();
    в разных местах.

    Сделал. Вот так работает

    /src/application/Application.java
    package application;
    
    public class Application {
    
        public static Snake s;
    
        public static void main(String[] args) {
            s = new Snake();
            s.go();
        }
    }


    /src/application/Snake.java
    package application;
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyAdapter;
    import javax.swing.*;
    import java.awt.event.KeyEvent;
    
    public class Snake extends JComponent {
    
        int x = 350;
        int y = 350;
        public MyPan drawPanel;
        JFrame frame;
        Timer timer = new Timer(100, new MyKey());
    
        public void go() {
            frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            drawPanel = new MyPan(this);
            timer.start();
            frame.getContentPane().add(drawPanel);
            frame.setSize(700, 700);
            frame.setVisible(true);
    
            frame.setFocusable(true);
            frame.setFocusTraversalKeysEnabled(false);
            frame.addKeyListener(new MyKey());
            frame.setFocusable(true);
        }
    
        public void moveRight() {
            x += 10;
            try {
                Thread.sleep(20);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public void moveLeft() {
            x -= 10;
            try {
                Thread.sleep(20);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public void moveDown() {
            y += 10;
            try {
                Thread.sleep(20);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public void moveUp() {
            y -= 10;
            try {
                Thread.sleep(20);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public class MyKey extends KeyAdapter implements ActionListener {
    
            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
                    moveRight();
                }
                if (e.getKeyCode() == KeyEvent.VK_UP) {
                    moveUp();
                }
                if (e.getKeyCode() == KeyEvent.VK_LEFT) {
                    moveLeft();
                }
                if (e.getKeyCode() == KeyEvent.VK_DOWN) {
                    moveDown();
                }
            }
    
            @Override
            public void actionPerformed(ActionEvent e) {
                drawPanel.repaint();
            }
        }
    }


    /src/application/MyPan.java
    package application;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class MyPan extends JPanel {
        //  Snake snake = new Snake();
    
        private Snake s;
    
        public MyPan(Snake ss) {
            s = ss;
        }
    
        public void paint(Graphics g) {
            g.setColor(Color.BLACK);
            g.fillRect(0, 0, 700, 700);
            g.setColor(Color.GREEN);
            g.fillRoundRect(s.x, s.y, 50, 50, 40, 40); 
        }
    }
    Ответ написан
    1 комментарий
  • Что есть у Delphi для организации очереди потоков?

    @Che_Bu_Rashka Автор вопроса
    В общем ответ найден -это указанная мной же библа OmniThreadLibrary с его Pipeline
    Ответ написан
    Комментировать
  • Для чего нужен clojure?

    @Che_Bu_Rashka
    После прочтения вот этой статьи Функциональное программирование для всех , я пришел к Clojure. Прочитайте её и вы увидите зачем вам нужен такой язык. Ещё Почему стоит изучить Clojure?
    Ответ написан
    Комментировать
  • Что учить после html5, css3, javascript?

    @Che_Bu_Rashka
    node.js
    фреймоврки ( Angular.JS, Express и проч)
    Базы данных.
    другие языки (Python, Go, Rust)
    Ответ написан
    2 комментария

Лучшие вопросы пользователя

Все вопросы (30)