如何将键侦听器设置为在对JFrame执行的JSplitPane中的特定窗格中运行



我目前有一个JFrame,我将其拆分为三个JSplitPane(一个从中间垂直拆分,左窗格有一个水平拆分)。我在左窗格中有一个功能性游戏,当它在自己的JFrame中单独运行时,它可以很好地工作,但当放入JSplitPane时,键上的动作监听器在游戏中不起作用,但我的空格键可以在另一个窗格中按启动按钮。

下面我发布了代码中处理拆分窗格的部分。我的问题是,有没有办法让游戏中的关键听众发挥作用?还有没有一种方法可以让启动按钮监听器保持工作,同时也可以让游戏保持工作,但当你按下"r"而不是空格键时,可以切换按钮的激活功能?

(代码中变量的快速概述。"棋盘"实际上是在另一个类中激活的游戏的一个新实例,它绘制棋盘并在你按下开始按钮时开始游戏。"GameTable"是左侧的JPanel,它包含开始按钮和快速标题。"Statistics"只包含一些非交互式的东西,如分数和高分。)

//Creates a new game and assigns it to the GameTable JPanel
    GameTable.add(board, BorderLayout.SOUTH);
    /* NOTE:
     * The Vertical and Horizontal SplitPanes are flipped.
     * The GameTableHorizontal uses the JSplitPane.VERTICAL_SPLIT function but splits horizontally
     * The opposite is true for the VerticalSplitPane
     * The cause for this is still unknown
     */
    //Adds GameTable JPanel and board to GameTableHorizontal SplitPane and adds that to JFrame
    GameTableHorizontal = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true, GameTable, board);
    GameTableHorizontal.setDividerLocation(50);
    GameTableHorizontal.setEnabled(false);
    this.add(GameTableHorizontal);
    //Adds GameTableHorizontal and Statistics JPanels to VerticalSplitPane and adds that to JFrame
    VerticalSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, GameTableHorizontal, Statistics);
    VerticalSplitPane.setDividerLocation(xPos/2);
    VerticalSplitPane.setEnabled(false);
    this.add(VerticalSplitPane);
    //Creates a start button and assigns an ActionListener to it
    Start = new JButton("Start");
    StartListener actionStart = new StartListener();
    Start.addActionListener(actionStart);

首先,变量名不应以大写字符开头。遵循Java惯例。不正确的命名约定扰乱了论坛上发布的代码的突出显示。

是的,有没有办法让游戏中的关键听众发挥作用?

不要使用KeyListeners。问题可能是因为你的游戏面板没有焦点。

Swing设计用于键绑定。使用Key Bindings时,可以将KeyStroke绑定到Action。即使组件没有焦点,Action仍然可以被调用。

你可以在论坛上搜索很多使用密钥绑定的例子。或者,您可以查看"使用键盘运动",了解使用这两种方法之间的比较代码。它包含了这两种方法的工作示例。

相关内容

  • 没有找到相关文章

最新更新