钥匙适配器不工作

时间:2013-08-30 15:50:15

标签: java swing jpanel keylistener setfocus

我在JPanel类中创建了一个KeyAdapter类,我尝试使用System.out.println(String par1)调试单击;

然而它似乎没有用......

这是班级:

package net.ryanshah;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class Menu extends JPanel
{
private GameFrame gf;

private Image bg = new ImageIcon("res/bg.png").getImage();

public Menu(final GameFrame parent) {
    this.gf = parent;
    int width = parent.getWidth();
    int height = parent.getHeight();

    setFocusable(true);

    addKeyListener(new MenuOperator());

    setBackground(Color.black);

    setLayout(null);
}

protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    Graphics2D g2d = (Graphics2D)g;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    int w = getWidth();
    int h = getHeight();
    g2d.drawImage(bg, 0, 0, null);
}

public class MenuOperator extends KeyAdapter {
    @Override
    public void keyPressed(KeyEvent event) {
        int keyCode = event.getKeyCode();
        if(keyCode == KeyEvent.VK_SPACE) {
            System.out.println("LOL");
        }
    }
}
}

有谁知道问题可能是什么?我已经在框架中设置了键处理程序,并将帧设置为可聚焦..

提前致谢

〜RyanS。

2 个答案:

答案 0 :(得分:2)

代码中认为不对的东西(恕我直言):

  • 您在代码中访问图片的方式。考虑ImageIO,使用ImageIcon的构造函数,因为前者会通知您,以防出现问题。有关详细信息,请参阅Loading Image Icon Exception,以获取更多信息。
  • KeyListeners适用于AWTSwing另一方面使用KeyBindings
  • 之前,在任何JComponent上设置背景更喜欢先将opaque的{​​{1}}属性设置为JComponent。由于true属性通常取决于使用的opaque
  • 尽可能避免使用LookAndFeel。请浏览Absolute Positioning的第一段以获取更多信息: - )
  • 正如评论中已经提到的那样使用setLayout(null)

@camickr撰写的此博客Motion Using the Keyboard将再次为您的知识添加负载,为什么ImageObserver不被视为更好的选择以及为什么KeyListeners更适合此类需求: - )

请看一下这个例子:

KeyBindings

答案 1 :(得分:0)

设置面板可调焦是不够的 - 面板无法专注于自己 - 你必须要求专注于某种事件。例如,您可以向面板添加鼠标侦听器,并在单击时调用panel.requestFocusInWindow()

如果您添加它的组件具有焦点,则关键侦听器将仅

相关问题