Java 我的密钥侦听器有什么问题?它根本不会进入按键状态 公共类扩展JPanel { int x=0; int y=0; int-previousX=x; int先前y=y; 公共迷宫() { 挫折地面(颜色:白色); addKeyListener(新的ArrowListener()); setPreferredSize(新尺寸(200200)); 设置聚焦(真); requestFocusInWindow(); } 公共组件(图形页) { super.paintComponent(第页); page.setColor(Color.WHITE); 第.fillRect页(上一页,上一页,第10页,第10页); 页面设置颜色(颜色为洋红色); 第3页:fillRect(x,y,10,10); } 私有类ArrowListener实现KeyListener { 按下公共无效键(KeyEvent事件) { 系统输出打印项次(“按下”); previousX=x; 前y=y; 开关(event.getKeyCode()) { case KeyEvent.VK_W: 如果(y>=0) y--; System.out.println(“up”); 打破 case KeyEvent.VK_S: 如果(y=0) x--; 系统输出打印项次(“左”); 打破 case KeyEvent.VK_D: if(x)
我很快编写了这个主类,并测试了您的代码。它对我很有用Java 我的密钥侦听器有什么问题?它根本不会进入按键状态 公共类扩展JPanel { int x=0; int y=0; int-previousX=x; int先前y=y; 公共迷宫() { 挫折地面(颜色:白色); addKeyListener(新的ArrowListener()); setPreferredSize(新尺寸(200200)); 设置聚焦(真); requestFocusInWindow(); } 公共组件(图形页) { super.paintComponent(第页); page.setColor(Color.WHITE); 第.fillRect页(上一页,上一页,第10页,第10页); 页面设置颜色(颜色为洋红色); 第3页:fillRect(x,y,10,10); } 私有类ArrowListener实现KeyListener { 按下公共无效键(KeyEvent事件) { 系统输出打印项次(“按下”); previousX=x; 前y=y; 开关(event.getKeyCode()) { case KeyEvent.VK_W: 如果(y>=0) y--; System.out.println(“up”); 打破 case KeyEvent.VK_S: 如果(y=0) x--; 系统输出打印项次(“左”); 打破 case KeyEvent.VK_D: if(x),java,swing,keylistener,keyevent,Java,Swing,Keylistener,Keyevent,我很快编写了这个主类,并测试了您的代码。它对我很有用 我很快编写了这个主类并测试了您的代码。它对我很有用。您正在查看java控制台吗?它对我很有用。编辑您的问题并显示您编写的代码,它将迷宫添加到窗口或小程序中。可能有其他东西窃取了焦点,可能是JButton或文本组件,如JTextField。这就是其中之一尝试避免使用键侦听器而改为使用键绑定的原因。尝试以下操作:如果您花费几分钟时间搜索“键侦听器不工作”,您会发现,在大多数情况下,这是一个与焦点相关的问题,最常用的解决方法是使用。从您得到的回答中
我很快编写了这个主类并测试了您的代码。它对我很有用。您正在查看java控制台吗?它对我很有用。编辑您的问题并显示您编写的代码,它将
迷宫
添加到窗口或小程序中。可能有其他东西窃取了焦点,可能是JButton或文本组件,如JTextField。这就是其中之一尝试避免使用键侦听器而改为使用键绑定的原因。尝试以下操作:如果您花费几分钟时间搜索“键侦听器不工作”,您会发现,在大多数情况下,这是一个与焦点相关的问题,最常用的解决方法是使用。从您得到的回答中可以看出,它也可能是一些随机的问题。您在java控制台上查看的是什么?它对我有用。编辑您的问题并显示您编写的代码,它将迷宫添加到窗口或ap中请注意,可能有其他东西正在窃取焦点,可能是JButton或文本组件,如JTextField。这是尝试避免使用KeyListener而改为使用键绑定的原因之一。请尝试以下方法:如果您花费几分钟时间搜索“Key listener不起作用”,您会发现,在大多数情况下,这是一个与焦点相关的问题,最常用的解决方法是使用。从您得到的响应中可以看出,它也可能是一些随机时间的问题setSize()和pack()相互排斥。只需要一个或另一个。setSize()和pack()相互排斥。只需要一个或另一个。
public class Maze extends JPanel
{
int x = 0;
int y = 0;
int previousX = x;
int previousY = y;
public Maze()
{
setBackground(Color.WHITE);
addKeyListener(new ArrowListener());
setPreferredSize(new Dimension(200, 200));
setFocusable(true);
requestFocusInWindow();
}
public void paintComponent(Graphics page)
{
super.paintComponent(page);
page.setColor(Color.WHITE);
page.fillRect(previousX, previousY, 10, 10);
page.setColor(Color.magenta);
page.fillRect(x, y, 10, 10);
}
private class ArrowListener implements KeyListener
{
public void keyPressed(KeyEvent event)
{
System.out.println("pressed");
previousX = x;
previousY = y;
switch(event.getKeyCode())
{
case KeyEvent.VK_W:
if(y >= 0)
y--;
System.out.println("up");
break;
case KeyEvent.VK_S:
if(y <= 100)
y++;
System.out.println("Down");
break;
case KeyEvent.VK_A:
if(x >= 0)
x--;
System.out.println("Left");
break;
case KeyEvent.VK_D:
if(x <= 100)
x++;
System.out.println("Right");
}
repaint();
}
public void keyReleased(KeyEvent event){}
public void keyTyped(KeyEvent event){}
}
}
import javax.swing.JFrame;
public class Main {
static Maze m = new Maze();
static JFrame frame = new JFrame();
public static void main(String[] args) {
frame.setSize(300, 300);
frame.add(m);
frame.pack();
frame.setVisible(true);
}
}