【问题标题】:JLabel should not be able to receive focus.. but it does?JLabel 不应该能够接收焦点.. 但它可以吗?
【发布时间】:2012-06-10 21:14:40
【问题描述】:

我正在开发一个使用默认 Swing 方法来处理焦点的 Swing 应用程序。焦点没有像我预期的那样工作。

在一种情况下,我有一个 JTextField,我调用 .requestFocusInWindow() 当窗口显示时,JLabel 具有焦点

JLabel 的 Java 6 文档说“因此,它无法获得键盘焦点”。 http://docs.oracle.com/javase/6/docs/api/javax/swing/JLabel.html

但是,我有一个示例应用程序,它显示 JLabel 接收焦点,并且 KeyboardFocusManager.getFocusOwner() 返回该组件。 (http://github.com/akinsgre/swingStarter)

类的代码是https://raw.github.com/akinsgre/swingStarter/master/src/main/java/test/HelloWorldSwing.java

谁能帮我理解或解释我遗漏了什么?

【问题讨论】:

  • 我们大多数人都不会去 unknow_depots,尤其是对于未来的读者,为了更好的帮助,请尽快使用SSCCE、JLabel 和可聚焦的 JComponent 之一编辑您的问题,例如JTextField 展示你的 Focus 和 Focusable
  • 不知道为什么 JLabel 会受到关注,而是对您的其他问题提出建议。 requestFocus() 的 javadoc 建议不要使用该方法,因为它依赖于平台,并尽可能使用 requestFocusInWindow()
  • mKorbel:我以为我正在这样做。 Github 存储库(未知?)是一个 maven 项目,具有单个类文件。但是没问题。类文件在这里raw.github.com/akinsgre/swingStarter/master/src/main/java/test/…(难道不是一个指向源的链接比内联粘贴代码更好)?
  • 谢谢丹尼。我在源代码中使用 requestFocusInWindow。但这并没有给我任何不同的结果。
  • “我有一个 JTextField,我称之为 .requestFocus()” 这不是 HelloWorldSwing 中声明 label.requestFocusInWindow(); 的行所建议的内容

标签: java swing focusmanager


【解决方案1】:

我认为您需要将标签与文本字段相关联。所以尝试使用 setLabelFor 方法,看看是否有帮助。

【讨论】:

  • 感谢 Bill 这并没有改变行为。 JLabel 仍然可以有焦点。我可以通过使用 setFocusable(false).. 来避免这个问题。这仍然不能解释为什么文档似乎不同意 JLabel 的行为
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多