两个JPanel,请求焦点和键盘输入

时间:2016-04-18 12:42:26

标签: java swing keyboard

为作业学习GUI,并且由于上述原因,我会很感激一些建议......没有代码。

我的程序包含JFrame和一个JPanel,其中包含使用KeyEvent类进行键盘输入的方法。

我的课程JPanel,其中包含以下内容:

    setFocusable(true);
    requestFocus();

我自修改程序以来,要包含第二个JPanel(在右边添加一个包含4 JButtons的控制面板)。

问题是当我运行程序时(之前做过),键盘输入不再适用于第一个JPanel

右侧JPanel上的键盘输入仅在第二个JPanel添加到程序之前有效。如果我删除第二个JPanel,键盘输入有效,当它在那里时它不会....

我意识到我在两个面板中都有setFocusable(true);requestFocus();,所以我从第二个面板(使用JButtons)删除了它,但它仍然无法正常工作。我觉得它是一个焦点问题.....任何建议?

我是否需要查看KeyBindings(不知道这是什么,但有一些类似的线程暗示它)....

3 个答案:

答案 0 :(得分:1)

我们无法根据两行代码告诉您哪里出了问题。我们不知道panel1和panel2做什么或它们包含什么组件。

  

我的课程扩展了JPanel,其中包含以下内容:

有几个问题:

  1. 您不应该使用requestFocus()方法。阅读该方法的API,它将告诉您使用的适当方法。
  2. 即使您使用了适当的方法,也不能在类的构造函数中使用该方法。只能对GUI上的可见组件请求关注组件。
  3.   

    我是否需要查看KeyBindings

    是的,Swing拥有比AWT更新更好的API。在AWT你没有选择。在Swing中你应该使用Key Bindings。所有Swing组件都使用Key Bindings和Actions。其中一个主要原因是您没有焦点问题。

    首先阅读Swing基础知识的Swing tutorial。有以下部分:

    1. How to Use Key Bindings
    2. How to Use Actions让你入门。
    3. Key Binding只是将KeyStroke映射到Action的过程。

      此外,将来,当您提出一个问题时,可以发布适当的SSCCE来证明问题。

答案 1 :(得分:0)

如果您的意思是“回传并强制”,焦点应该在这两者之间的Tab键上移动,请使用FocusTraversalPolicy来定义谁应该以哪个顺序获得焦点。

答案 2 :(得分:0)

单击按钮时,该按钮将获得键盘焦点。如果你想让焦点恢复到第一个JPanel,那么你应该为每个按钮添加一个ActionListener,并且在监听器的actionPerformed()方法中添加一行:

delta