[英]Moving Shapes With KeyListener In Java
我正在尝试编写一个程序,该程序允许用户使用箭头键移动形状并使用Enter键更改其颜色。 我没有学过任何有关GUI或基于事件的编程的知识,所以这是我的第一次经验。 我想我了解它的基础知识,但是我在完成语法以使所有内容运行时遇到麻烦。 我在网上找到的教程没有使用计时器。 这是我当前的代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Lab15Panel extends JPanel
{
Color[] colors = new Color[]{Color.blue, Color.green, Color.red, Color.orange, Color.yellow};
int initialX = 90;
int initialY = 80;
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(colors[0]);
g.fillRect(initialX, initialY, 100, 100);
Lab15Key listen = new Lab15Key();
}
private class Lab15Key implements KeyListener
{
@Override
public void keyTyped(KeyEvent event)
{
if (event.getKeyChar() == KeyEvent.VK_LEFT)
{
initialX++;
}
}
@Override
public void keyReleased(KeyEvent event)
{}
@Override
public void keyPressed(KeyEvent event)
{}
}
}
我在不同的班级做相框。 现在,我不确定两件事:1.如何使用填充形状的addKeyListener? 有没有办法引用填充的形状? 2.我“移动”形状的想法正确吗? 也就是说,要在形状位置的方法之外创建变量,然后使用我的KeyEvent更改这些数字? 还是在这种情况下不移动形状? (请注意,我只编写了向上键事件的代码。)
您能给我的任何帮助将不胜感激。 我绝对是Java的新手,我只是想了解这些基本概念,但是我所获得的资源却无济于事。
您需要将KeyListener
添加到面板中才能真正使它侦听按键。 这称为注册侦听器。 我将其放在构造函数中:
public Lab15Panel()
{
Lab15Key listen = new Lab15Key();
this.addKeyListener(listen);
}
没有此步骤,您将创建侦听器,但是没有人可以告知何时听到声音。
如果只希望每次按键时都重新绘制面板,则可以在KeyListener中执行以下操作:
@Override
public void keyTyped(KeyEvent event)
{
if (event.getKeyChar() == KeyEvent.VK_LEFT)
{
initialX++;
}
Lab15Panel.this.repaint(); // Calls repaint on the instance of the enclosing class
}
有许多问题对您不利...
KeyListener
,因此它将永远不会收到按键事件 repaint
来给Swing微调 KeyListener
是一件很痛苦的事情,它只会在它附加到IS可聚焦且具有HAS焦点的组件上时才触发,通常,最好不要使用Key Bindings
有关更多详细信息,请参见如何使用键绑定 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.