由于某种原因,我的KeyListener只是不响应KeyPressed事件。
如果有关系,我使用的是Ubuntu 12.04。每当按下某个键时,它应该打印“ Key Pressed”,但不是这样。
这是代码:
import java.awt.event.*;
import javax.swing.*;
import java.awt.Graphics;
public class DisplayPanel extends JPanel
{
private Tile[][] tiles;
private Creature[] creatures;
private Dungeon dungeon;
private Player player;
public DisplayPanel(Dungeon dungeon, Tile[][] tiles, Creature[] creatures, Player player)
{
this.tiles = tiles;
this.creatures = creatures;
this.dungeon = dungeon;
this.player = player;
addKeyListener(new DungeonKeyListener());
requestFocus();
}
protected void paintComponent(Graphics g)
{
int maximum = (getWidth() < getHeight()) ? getWidth() : getHeight();
for (Tile[] row : tiles)
{
for (Tile tile : row)
{
if (tile != null && tile instanceof Tile)
{
tile.draw(g, maximum/tiles.length, maximum/tiles[0].length);
}
}
}
for (Creature creature : creatures)
{
if (creature != null && creature instanceof Creature)
{
creature.draw(g, maximum/tiles.length, maximum/tiles[0].length);
}
}
if (player != null && player instanceof Player)
{
player.draw(g, maximum/tiles.length, maximum/tiles[0].length);
}
}
private class DungeonKeyListener extends KeyAdapter
{
public void keyReleased(KeyEvent e)
{
System.out.println("Key pressed!");
dungeon.press(e.getKeyCode());
repaint();
}
}
}
super.paintComponent
(与您的问题无关,但稍后会解决一些问题)Component#setFocusable
KeyListener
Component#requestFocusInWindow
过Component#requestFocus
…从Java文档
因为此方法的焦点行为取决于平台,所以强烈建议开发人员在可能的情况下使用requestFocusInWindow
问题内容: 我正在做一个涉及JPanel中的鼠标和键监听器的小项目。不幸的是,当我使用鼠标/键盘时,没有一个方法被调用。我之前曾使用过JPanels / JFrame / JApplet和JComponents。代码片段如下所示: 偏离主题:我不断收到错误消息您的帖子似乎包含格式错误的代码。请使用代码工具栏按钮或CTRL + K键盘快捷键将所有代码缩进4个空格。要获得更多编辑帮助,请单击[?]工具
问题内容: 我发现,当我编写“ pnlMap.add(map [i] [j])”时,键侦听器将无法工作。map是JButton的集合,pnlMap是JPanel。 公共游戏(玩家播放器){ 问题答案: 为了工作,必须将其注册为可聚焦的组件并使其具有键盘焦点。默认情况下,大多数容器都喜欢和无法将其聚焦(在考虑使它们成为容器之前,我会非常小心)。这意味着,一旦您添加了一个可以接受键盘焦点的组件(并且它
额外信息:我是用BlueJ来从中,用4个类在basic程序中回答我的问题。我意识到很多人在互联网上说要使用键绑定而不是KeyListener,但我现在不明白键绑定... ---遵循装满鳗鱼的气垫船的建议,我将尝试使用键绑定。--- 所以Keybindings有两个“命令”来工作:输入和操作。
问题内容: 我的程序应该等待按下向左或向右箭头键,然后更改一个值,以便下次更新PaintComponent时,屏幕看起来有所不同。但是,运行该程序时,屏幕没有变化。 以下是变量声明: 这是主要的KeyListener声明: 这是用于绘画的方法: 当我运行该程序时,该程序会打印外壳,但是当我按箭头键时,屏幕上没有任何变化。 问题答案: 您需要先将关键侦听器添加到组件,然后才能调用它: 您还需要使组件
有人能告诉我为什么这也不管用吗?(我的第二个动作监听器是我的游戏所需的其他东西)
因此,我在一个控制器中有一个非常简单的代码片段,在这个代码片段中,我使用从外部文件中获取数据,它工作得很好!但是当我使用时,我会在控制台中得到一个