为作业学习GUI,并且由于上述原因,我会很感激一些建议......没有代码。
我的程序包含JFrame
和一个JPanel
,其中包含使用KeyEvent
类进行键盘输入的方法。
我的课程JPanel
,其中包含以下内容:
setFocusable(true);
requestFocus();
我自修改程序以来,要包含第二个JPanel
(在右边添加一个包含4 JButtons
的控制面板)。
问题是当我运行程序时(之前做过),键盘输入不再适用于第一个JPanel
。
右侧JPanel上的键盘输入仅在第二个JPanel添加到程序之前有效。如果我删除第二个JPanel,键盘输入有效,当它在那里时它不会....
我意识到我在两个面板中都有setFocusable(true);
和requestFocus();
,所以我从第二个面板(使用JButtons
)删除了它,但它仍然无法正常工作。我觉得它是一个焦点问题.....任何建议?
我是否需要查看KeyBindings(不知道这是什么,但有一些类似的线程暗示它)....
答案 0 :(得分:1)
我们无法根据两行代码告诉您哪里出了问题。我们不知道panel1和panel2做什么或它们包含什么组件。
我的课程扩展了JPanel,其中包含以下内容:
有几个问题:
requestFocus()
方法。阅读该方法的API,它将告诉您使用的适当方法。我是否需要查看KeyBindings
是的,Swing拥有比AWT更新更好的API。在AWT你没有选择。在Swing中你应该使用Key Bindings。所有Swing组件都使用Key Bindings和Actions。其中一个主要原因是您没有焦点问题。
首先阅读Swing基础知识的Swing tutorial。有以下部分:
How to Use Key Bindings
How to Use Actions
让你入门。 Key Binding
只是将KeyStroke
映射到Action
的过程。
此外,将来,当您提出一个问题时,可以发布适当的SSCCE来证明问题。
答案 1 :(得分:0)
如果您的意思是“回传并强制”,焦点应该在这两者之间的Tab键上移动,请使用FocusTraversalPolicy
来定义谁应该以哪个顺序获得焦点。
答案 2 :(得分:0)
单击按钮时,该按钮将获得键盘焦点。如果你想让焦点恢复到第一个JPanel,那么你应该为每个按钮添加一个ActionListener,并且在监听器的actionPerformed()方法中添加一行:
delta