【问题标题】:Unable to set focus for keyboard input using WindowBuilder SWING UI无法使用 WindowBuilder SWING UI 为键盘输入设置焦点
【发布时间】:2017-05-02 09:36:35
【问题描述】:

我在 Eclise neon 和 Java 1.8 中使用 WindowsBuilder 编写了一个基本的计算器类型程序。它非常完整,一切都按照我的意愿工作。键盘输入除外。

作为画龙点睛之笔,我想检测 keyTyped 事件并将它们映射到按钮按下,以便用户可以使用键盘进行输入,而不是用鼠标单击按钮。

我在程序类中添加了“实现 KeyListener”...

public class CashRegister implements KeyListener {
    private JTextField keyb;

我尝试为一个名为 keyb 的不可见 JTextField 设置一个侦听器......

private void initialize() {
    keyb = new JTextField(20);
    keyb.addKeyListener(this);
    keyb.setFocusable(true);
    keyb.requestFocusInWindow();

我还添加了处理捕获的按键的方法...

public void keyTyped (KeyEvent e) {
    String out = "";
    out = out + e.getKeyChar();
    pence1text.setText(out);
}
public  void keyPressed (KeyEvent e) {

}
public  void keyReleased (KeyEvent e) {

}

所以,在这个阶段,我所期待的,证明它正在工作,是我按下的关键字符出现在名为“pence1text”的文本字段中。但是,它不起作用,当我按 a 键时没有显示任何内容。

我认为这可能是一个焦点问题。谷歌搜索并检查 stackoverlow 导致我添加以下行...

    keyb.setFocusable(true);
    keyb.requestFocusInWindow();

如上,但仍然没有运气。

有没有人知道我做错了什么,或者我接下来可以尝试什么?

谢谢

【问题讨论】:

  • public boolean requestFocusInWindow() 返回的boolean 的值是多少?打赌它是false
  • 是的,它返回 false。我认为这就是问题所在。我错过了什么?谢谢。
  • 尝试阅读this 文章。使用修饰符 JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT 注册根窗格的所有操作。
  • “我错过了什么?”documentation,以及方法的“完整描述”链接?
  • Listening for Changes on a Document 将优先于 KeyListener

标签: java eclipse swing keyboard-events windowbuilder


【解决方案1】:

感谢用户 Andrew Thompson 将我带回文档并重新阅读。

问题在于 JTextField 不可见,因此无法获得焦点。如果我将侦听器添加到可见的文本字段,则程序可以正常工作。但是,如果用户使用鼠标单击按钮,它会失去焦点并中断实现......所以我需要重新考虑代码并继续查看焦点设置。

【讨论】:

    【解决方案2】:

    作为画龙点睛之笔,我想检测 keyTyped 事件并将它们映射到按钮按下,以便用户可以使用键盘进行输入,而不是用鼠标单击按钮。

    不要使用 KeyListener。

    您应该使用Key Bindings。阅读 How to Use Key Bindings 上的 Swing 教程部分了解基本信息。

    另请查看:how to put actionlistenerand actioncommand to multiple jbuttons 的工作示例,该示例展示了如何将键绑定应用于计算器。

    【讨论】:

      猜你喜欢
      • 2016-02-27
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      相关资源
      最近更新 更多