java - 是否可以将 JComponent 默认设置为不可聚焦?

标签 java swing focus keylistener jcomponent

我知道您可以调用 JComponent.setFocusable(false) 来使 Java 组件不可聚焦。但由于我的应用程序中有很多组件我希望成为这种方式,所以我想知道是否有一种比在数十个对象中的每一个上调用它更简单的方法。就像 UIDefaults 值一样?

我正在寻找这个,因为我的应用程序全屏运行,并且 JFrame 上有一个 KeyListener ,它监听击键以触发各种事件。但我发现,每当单击 JButton 或其他添加的组件时,它都会获得焦点,并且关键事件永远不会到达 JFrame。因此,一种更优雅的方法,让单个父容器捕获关键事件,无论哪个子容器拥有焦点,也可以解决我的问题。

最佳答案

I was wondering if there is a simpler way than calling it on every one of dozens of objects.

我从来没见过。

there is a KeyListener on the JFrame that listens for key strokes to trigger various events.

不要使用 KeyListener。

相反,您可以将 JMenus 和 JMenuItems 与加速器一起使用。这种方法的好处是击键记录在菜单中。请参阅 Swing 教程中关于 How to Use Menus 的部分.

或者,如果您不喜欢菜单,那么您应该使用 Key Bindings 。即使组件没有焦点,它们也可以通过编码来工作。

关于java - 是否可以将 JComponent 默认设置为不可聚焦?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6860871/

相关文章:

java - JFrame : All the frames close when I try to close just one of them

javascript - 自动对焦后触发Jquery函数

c# - WPF UserControl 检测 LostFocus 忽略 child

java - Java Session 的低级实现

java - 在Java中将多个变量初始化为相同的值

java - JBox2D - 查找碰撞坐标

java - 在同一 block 中调用方法两次。为什么?

java - 从另一个框架获取值

java - 具有相同功能按钮的多个 Jpanel

windows - 事件窗口 - 如何防止标题栏变成蓝色/灰色