Получите FLabel или изображение для перемещения с клавиатуры - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь заставить этот JLabel двигаться, я перепробовал все и каждый код, но он просто не будет работать.Кажется, это никогда не работает, я поместил repaint() везде, где это имело бы смысл, а также код движения, и он все еще, кажется, не работает так, как раньше.Я просто не пытался сделать это с импортированным изображением, так как было также трудно найти хороший способ сделать это.

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.ImageIcon;

public class Move extends JFrame {

    private JPanel contentPane;


    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Move frame = new Move();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Move() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);    


            JLabel label = new JLabel("");
            label.setIcon(new ImageIcon(Move.class.getResource("/images/Untitled-2.png")));
            label.setBounds(192, 130, 87, 58);
            contentPane.add(label);

            label.addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent ke) {
                    if(ke.getKeyCode() == KeyEvent.VK_DOWN) {
                        label.setLocation(label.getX(),label.getY()+1);
                        label.repaint();
                    }
                    if(ke.getKeyCode() == KeyEvent.VK_UP) {
                        label.setLocation(label.getX(),label.getY()-1);
                        label.repaint();
                    }
                    if(ke.getKeyCode() == KeyEvent.VK_LEFT) {
                        label.setLocation(label.getX()+1,label.getY());
                        label.repaint();
                    }
                    if(ke.getKeyCode() == KeyEvent.VK_RIGHT) {
                        label.setLocation(label.getX()-1,label.getY());
                        label.repaint();
                    }
                    label.repaint();
                }
            });

    }
}

1 Ответ

0 голосов
/ 20 мая 2018
  1. Присоедините KeyListener к самому экземпляру Move, а не к label внутри него, т. Е. Используйте просто следующее:

    addKeyListener(new KeyAdapter() { ...
    
  2. Удалите те label.repaint(); заявления, которые являются избыточными.

  3. Вы перепутали движения влево и вправо.Так что исправьте это тоже.

При объединении всего этого финальная часть конструктора Move() должна выглядеть так:

    addKeyListener(new KeyAdapter() {
        public void keyPressed(KeyEvent ke) {
            if (ke.getKeyCode() == KeyEvent.VK_DOWN)
                label.setLocation(label.getX(), label.getY() + 1);
            if (ke.getKeyCode() == KeyEvent.VK_UP)
                label.setLocation(label.getX(), label.getY() - 1);
            if (ke.getKeyCode() == KeyEvent.VK_LEFT)
                label.setLocation(label.getX() - 1, label.getY());
            if (ke.getKeyCode() == KeyEvent.VK_RIGHT)
                label.setLocation(label.getX() + 1, label.getY());
        }
    });
...