如何使用Mouselistener?移动按钮?

时间:2016-10-08 12:40:12

标签: java swing jframe jbutton keylistener

我目前正在开发一个小桌面游戏。我必须放置"对象"在Button数组上。我想放置的对象是1 * 1 1 * 2等,它们由禁用按钮表示。有没有什么方法可以用键盘的Keylisteners移动生成的禁用按钮,因为我无法让它工作

public GuiP1() {
    super();
    Panel.setLayout(null);
    this.add(Panel);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setTitle("BattleshipsP1");
    this.setSize(640, 1000);
    this.setVisible(false);
    this.addKeyListener(new KeyListener() {
        public void keyPressed(KeyEvent arg0) {
        }
        public void keyReleased(KeyEvent arg0) {

            if (arg0.getKeyCode() == KeyEvent.VK_RIGHT) {
                System.out.println("VK_RIGHT");
            } else if (arg0.getKeyCode() == KeyEvent.VK_LEFT) {
                System.out.println("VK_LEFT");
            } else if (arg0.getKeyCode() == KeyEvent.VK_UP) {
                System.out.println("VK_UP");
            } else if (arg0.getKeyCode() == KeyEvent.VK_DOWN) {
                System.out.println("VK_DOWN");
            }
        }
        public void keyTyped(KeyEvent arg0) {
        }
    });
    Grid();
    this.setVisible(true);
}

它不会听按键按下

谢谢你JFluX

1 个答案:

答案 0 :(得分:2)

您的KeyListeners无法正常工作,因为已侦听的组件必须是可聚焦的,并且具有可供其使用的焦点。 kludge解决方案是通过

强制收听组件获得焦点
  • 通过setFocusable(true)
  • 使听取的组件可以集中
  • 通过requestFocusInWindow()
  • 给予焦点
  • 并通过在其上调用setFocusable(false)使附加组件无法调焦。

更好的解决方案是使用Key Bindings,它与组件焦点无关。