如何使用鼠标监听器?移动按钮



我目前正在制作一款小型桌面游戏。我必须将"对象"放在按钮数组上。我想放置的对象是1*1 1*2等,他们是由禁用按钮表示。是否有任何方法,我可以移动与键盘的键盘监听器产生的禁用按钮,因为我不能让它工作

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

KeyListeners不能工作,因为被监听的组件必须是可聚焦的,并且要有焦点才能工作。一个拼凑的解决方案是通过

强制侦听组件具有焦点。
  • 通过setFocusable(true)
  • 使被监听组件可聚焦
  • 通过requestFocusInWindow()给它焦点
  • 和通过调用setFocusable(false)使添加的组件不可聚焦。

一个更好的解决方案是使用Key Bindings,它与组件焦点的关系不是那么紧密。

最新更新