【发布时间】:2016-02-01 02:32:40
【问题描述】:
我正在创建一个程序,该程序创建一个将使用箭头键移动的球,但是当我运行代码时,球开始在角落,我只能在每个方向移动一次。 代码如下:
package squareMovingUsingArrowKeys;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
@SuppressWarnings("serial")
public class squareMovingUsingArrowKeys extends JPanel implements ActionListener,KeyListener {
static int x;
static int y;
Timer timer;
squareMovingUsingArrowKeys() {
x = 0;
y = 0;
timer = new Timer(20, this);
}
@SuppressWarnings("deprecation")
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
x = -1;
}
else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
x = 1;
}
else if (e.getKeyCode() == KeyEvent.VK_UP) {
y = -1;
}
else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
y = 1;
}
//first call move to update x and y and later repaint that JPanel
move(x, y);
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillOval(x, y, 10, 10);
}
public void start() {
keyPressed(null);
paintComponent(null);
}
public static void main(String[] args) {
JFrame f = new JFrame("Moving");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
squareMovingUsingArrowKeys m = new squareMovingUsingArrowKeys();
f.add(m);
f.setSize(500, 500);
f.setVisible(true);
m.timer.start();
f.addKeyListener(m);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
这不是作业或类似的东西,我只是在学习 java 并想尝试一下。 还请记住,我只有 9 岁,是个菜鸟。
【问题讨论】:
-
快速解决方案:使具有 KeyListener 的 JPanel 具有焦点,然后将其赋予焦点。更好更健壮的解决方案:使用 Key Bindings 而不是 KeyListener。 Search for similar questions.
标签: java swing animation graphics keylistener