21

我有一个JPanel里面的JFrame。我已经注册了一个KeyListener,基于它我想更新JPanel. 我遇到的问题是我无法专注于JPanel,因此我KeyListener不会工作。我已经知道它KeyListener是有效的,因为我用它注册了它JFrame并且它运行良好。我的代码现在是这样的:

myFrame.setFocusable(false);
myPanel.setFocusable(true);
myPanel.addKeyListener(myKL);
myFrame.add(myPanel);

有没有人遇到过这样的问题?在这方面我有什么遗漏吗?

PS:我内部没有任何组件,JPanel我只是在背景上绘制一个图像,所以我需要将焦点放在 JPanel 本身而不是它里面的东西上。

4

5 回答 5

25

尽管您表明面板可以聚焦,但面板并没有要求获得焦点。尝试使用myPanel.requestFocus();.

于 2010-01-25T20:16:53.353 回答
7

使用setFocusable(true)然后requestFocusInWindow()。但后者必须在包含面板的窗口可见完成,为此您可能需要注册一个窗口侦听器并requestFocusInWindow()在窗口激活的处理程序代码中执行。

注意:特别是在窗口可见之后,而不仅仅是在调用setVisible(true).

于 2010-01-26T02:04:15.750 回答
2

我有时会遇到类似的问题。我注意到在某些情况下,最好将焦点放在框架内的面板中的特定控件上(例如,您希望键盘输入进入的输入框),而不是请求焦点窗格本身。

于 2010-01-25T21:26:02.643 回答
2

尝试

panel.setFocusable(true);
panel.setRequestFocusEnabled(true);

// some code here

panel.grabFocus();
于 2010-01-25T23:53:24.730 回答
1

尝试这样的事情:

    myFrame.addFocusListener(new FocusAdapter() {

        /**
         * {@inheritDoc}
         */
        @Override
        public void focusGained(FocusEvent aE) {
            myPanel.requestFocusInWindow();
        }
    });
于 2014-09-04T15:18:11.913 回答