gpt4 book ai didi

Java - JPanel 和 KeyListener 问题

转载 作者:行者123 更新时间:2023-12-01 16:01:11 25 4
gpt4 key购买 nike

我有一个带有 3 个面板的 JFrame。我扩展一个 App 类,然后向其中添加三个面板,如下所示:

JPanel controlButtonsPanel = new GameControlButtons();
controlButtonsPanel.setPreferredSize(new Dimension(801,60));
controlButtonsPanel.setBorder(new LineBorder(Color.white, 1));
constraints.anchor = GridBagConstraints.NORTHWEST;
constraints.weightx = 2;
constraints.weighty = 0.3;
this.add(controlButtonsPanel, constraints);

JPanel tempP = new JPanel();
/`/ *** I'm going to create a Jpanel subclass for this, too, I just haven't yet.`
tempP.setPreferredSize(new Dimension(500,838));
tempP.setBorder(new LineBorder(Color.white, 2));
constraints.anchor = GridBagConstraints.NORTHEAST;
constraints.weightx = 1;
constraints.weighty = 2;
this.add(tempP, constraints);

JPanel graphicsPanel = new RoofRunnerGame("Ken");
constraints.anchor = GridBagConstraints.SOUTHWEST;
constraints.weightx = 2;
constraints.weighty = 1;
graphicsPanel.setBorder(new LineBorder(Color.white, 1));
graphicsPanel.setPreferredSize(new Dimension(800,800));
graphicsPanel.requestFocus();
this.add(graphicsPanel, constraints);

我已经为 GameControlButtons 和 RoofRunnerGame 类扩展了 JPanel。我在前者的基础上添加了一个鼠标监听器。我已经为后者添加了一个鼠标监听器和一个按键监听器。

** 问题:鼠标监听器对两者都工作正常,但关键监听器似乎没有在我的 RoofRunnerGame 面板中监听。**

我在网上发现了两个可能的修复方法,但想先询问一下。

1) 其中一个是在 RoofRunnerGame 子类中调用 requestFocus()。问题是,一旦我单击不同的面板,它就会失去焦点。 (这是一个短期修复。)

2) 提到的另一件事是使用 keyBindings。我以前从未使用过它们。如果您推荐它,我会的,但如果可能的话,我更愿意继续使用 keyListener。

那么,你觉得怎么样?有什么方法可以让 RoofRunnerGame 面板始终保持 KEY 监听吗?

最佳答案

您可以使其他面板不可聚焦,但可能还需要使这些面板上的每个组件不可聚焦。

参见this ,和this有关通过 ActionMap 添加关键监听器的示例。 getInputMap() 方法中的 JComponent.WHEN_IN_FOCUSED_WINDOW 标志应该允许您的面板即使在未聚焦时也能接收输入事件。

关于Java - JPanel 和 KeyListener 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3852799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com