【问题标题】:How can the Mouselistener be used ? to move buttons?如何使用鼠标监听器?移动按钮?
【发布时间】:2017-02-17 08:26:24
【问题描述】:

我目前正在开发一款小型棋盘游戏。我必须在 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

【问题讨论】:

  • 是的,你可以,但魔鬼在细节中,你的 GUI 和代码的细节,你需要与我们分享。您将使用 MouseAdapter 并将其添加为 MouseListener 和 MouseMotionListener。
  • 请显示任何代码作为对原始问题的编辑,因为如您所见,代码在 cmets 中的格式不正确。此外 cmets 通常不会被阅读,因此您问题的关键组成部分应该在您的实际原始问题中。最好能发布一个可运行的minimal reproducible example——不是你的整个程序,也不是代码链接,而是一个向我们展示你的问题的小新程序——检查链接。
  • 另外,请看一下这个link to similar questions。你可能会从他们那里得到一些不错的想法。
  • 等等,我现在很困惑——我们是用鼠标说话还是用按键监听器说话?
  • 我无法让鼠标监听器工作,所以我开始尝试一个按键监听器,它也没有工作,所以我不知道我能做什么或能做什么......

标签: java swing jframe jbutton keylistener


【解决方案1】:

您的 KeyListener 无法正常工作,因为被侦听的组件必须是可聚焦的并且具有焦点才能使它们工作。一个 kludge 解决方案是通过

强制收听的组件具有焦点
  • 通过setFocusable(true) 使收听的组件成为焦点
  • 通过requestFocusInWindow()给它焦点
  • 并通过调用 setFocusable(false) 使添加的组件无法聚焦。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 2013-12-24
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2013-07-20
    相关资源
    最近更新 更多