KeyListener的不工作 [英] KeyListener not working

查看:140
本文介绍了KeyListener的不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于某些原因,我的KeyListener只是不响应的关键pressed事件。

如果它很重要,我在Ubuntu 12.04。应打印键pressed每当关键是pressed,但事实并非如此。

这里的code:

 进口java.awt.event中。*;
进口的javax.swing *。
进口java.awt.Graphics;公共类DisplayPanel继承JPanel
{
    私人瓷砖[] []瓷砖;
    私人生物[]动物;
    私人地下城地牢;
    私人Player播放器;    公共DisplayPanel(地牢地牢,瓷砖[] []瓷砖,生物[]生物,Player播放器)
    {
        this.tiles =砖;
        this.creatures =动物;
        this.dungeon =地牢;
        this.player =玩家;
        addKeyListener(新DungeonKeyListener());
        requestFocus()方法;
    }    保护无效paintComponent(图形G)
    {
        INT最大=(的getWidth()&所述;的getHeight())?的getWidth():的getHeight();
        对于(平铺[]行:砖)
        {
            对于(瓷砖瓷砖:行)
            {
                如果(瓦= NULL&放大器;!&安培;瓷砖瓷砖的instanceof)
                {
                    tile.draw(克,最大/ tiles.length,最大/瓦[0]。长度);
                }
            }
        }
        对于(生物生物:生物)
        {
            如果(生物= NULL&放大器;!&安培;生物的instanceof生物)
            {
                creature.draw(克,最大/ tiles.length,最大/瓦[0]。长度);
            }
        }        如果(玩家= NULL&放大器;!&安培;球员的instanceof播放器)
        {
            player.draw(克,最大/ tiles.length,最大/瓦[0]。长度);
        }
    }    私有类DungeonKeyListener扩展KeyAdapter
    {
        公共无效调用keyReleased(KeyEvent e而)
        {
            的System.out.println(键pressed!);
            。地牢preSS(e.getKey code());
            重绘();
        }
    }
}


解决方案

  • 呼叫 super.paintComponent方法(不涉及您的问题,但会解决一些问题以后)

  • 请组件可聚焦 - <一个href=\"http://docs.oracle.com/javase/7/docs/api/java/awt/Component.html#setFocusable%28boolean%29\"><$c$c>Component#setFocusable

  • 使用键绑定超过的KeyListener

  • 使用组件#requestFocusInWindow 组件#requestFocus的 ...

从Java文档


  

由于这种方法的焦点行为是与平台相关的,
  开发者强烈建议使用requestFocusInWindow时
  可能的


For some reason, my KeyListener just isn't responding to KeyPressed events.

If it matters, I'm on Ubuntu 12.04. It should be printing "Key Pressed" whenever a key is pressed, but it doesn't.

Here's the code:

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();
        }
    }
}

解决方案

  • Call super.paintComponent (not related to you question, but will solve some issues later on)
  • Make the component "focusable" - Component#setFocusable
  • Use key bindings over KeyListener
  • Use Component#requestFocusInWindow over Component#requestFocus...

From the Java Docs

Because the focus behavior of this method is platform-dependent, developers are strongly encouraged to use requestFocusInWindow when possible

这篇关于KeyListener的不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆