java - 获取 FLabel 或图像以通过键盘移动

标签 java eclipse swing jlabel

我正在尝试让这个 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. 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());
        }
    });

关于java - 获取 FLabel 或图像以通过键盘移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50429254/

相关文章:

java - 在 eclipse 上更改 JRE 时构建项目

java - Fitnesse Maven Linux 运行

eclipse - 如何使用 cfeclipse 插件在 Eclipse 中格式化文本

java - 为什么我应该使用 NIO(或像 netty 这样的框架)而不是 java 执行器?

android - MyFirstApp Android 编码教程中的错误“Intent 构造函数未定义。

java - 在 Eclipse 4.2 Juno 上安装 WindowBuilder ZIP 版本

java - 将行插入 JTable 时出现重复值

java - (Java) 在运行时更改 swing 组件的文本(资源包)

java - 在 Tomcat6 中部署 webapp

java - 在 Java 中序列化选择性类变量