我正在尝试编写一个程序,允许用户使用箭头键移动形状并使用回车键更改其颜色。我没有接受任何关于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与填充的形状一起使用?有没有办法参考填充的形状? 我的想法是“移动”正确的形状吗?也就是说,在形状位置的方法之外创建变量,然后使用我的KeyEvents来更改这些数字?或者在这种情况下不会移动形状? (注意我只编写了up键事件的代码。)
您可以给我任何帮助,我们将不胜感激。我绝对是一个Java新手,我只是想了解这些基本概念,但我所掌握的资源并没有帮助。
答案 0 :(得分:0)
您需要将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
}
答案 1 :(得分:0)
有许多问题对你不利......
KeyListener
,因此永远不会收到关键事件repaint
KeyListener
是一种痛苦,它只会触发它附加到IS的组件可聚焦和HAS焦点,一般来说,你最好使用Key Bindings
有关详细信息,请参阅How to use key bindings