【问题标题】:Moving a rectangle in JPanel with arrow keys using KeyListener使用 KeyListener 在 JPanel 中使用箭头键移动矩形
【发布时间】:2013-06-19 05:54:27
【问题描述】:

我一直在尝试用箭头键移动JPanel。它一直没有工作。我相信是我的内部类扩展了KeyAdapter。我也不确定是否实施了ActionListener。我做的另一个类无关紧要,因为它只是框架。

package jerryWorlds;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Jerry extends JPanel implements ActionListener{

int SizeX, SizeY, PosX, PosY, VelX, VelY;
Image img;
Timer time = new Timer(1, this);

public Jerry(){
    ImageIcon i = new ImageIcon();
    addKeyListener(new AL());
    time.start();
    img = i.getImage();
    PosX = 375;
    PosY = 250;
}

public void paint(Graphics g){
    Graphics2D g2d = (Graphics2D)g;
    g2d.fillRect(PosX, PosY, 50, 100);
}
public void actionPerformed(ActionEvent e) {
    PosX = PosX + VelX;
    repaint();
}

private class AL extends KeyAdapter{
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        System.out.println("YAY!");
        if(key == KeyEvent.VK_LEFT)
            VelX = -1;
        else if(key == KeyEvent.VK_RIGHT)
            VelX = 1;
    }

    public void keyReleased(KeyEvent e) {
        int key = e.getKeyCode();
        if(key == KeyEvent.VK_LEFT)
            VelX = 0;
        else if(key == KeyEvent.VK_RIGHT)
            VelX = 0;
    }
}

}

【问题讨论】:

  • @camickr 的这篇关于Motion Using the Keyboard 的帖子肯定会增加你的知识:-)。似乎您的问题不是以书面形式编写的,查看代码似乎您想在按下箭头键时绘制一个新矩形,您实际上并没有像标题中所述那样移动您的JPanel...

标签: java swing jpanel awt keylistener


【解决方案1】:
  • 您需要在此网站上搜索类似的问题,因为它们通常具有相同的问题和相同的答案。
  • 他们会告诉您焦点是一个问题,因为组件的 KeyListener 除非具有焦点,否则将无法工作。
  • 他们会告诉你,无论如何你都不应该使用 KeyListener,而应该使用 Key Bindings。
  • 他们会告诉您不要覆盖 paint(...),而是 paintComponent(...),除非您确定要覆盖组件边框和子项的绘制(您不想)。
  • 他们会告诉你一定要调用paintComponent(...) 内部的超级方法。

也请看看这个animation and key bindings example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    相关资源
    最近更新 更多