似乎 JButton
在单击时不会自动接收焦点,除非我使用 .setRequestFocusEnabled(true)
显式配置按钮。我正在使用的应用程序在许多不同的地方创建了很多按钮(即不是通过工厂方法),我需要所有按钮在单击时请求焦点。
是否有一种简单的方法可以更改默认行为,例如通过设置某些属性,使按钮在默认情况下请求获得焦点?或者我需要找到它们并在每个按钮上一个一个地调用 .setRequestFocusEnabled(true)
?
最佳答案
JButton 应该在单击时获得焦点。您可能已经修改了按钮以不执行此操作。然而,这并不能解决您的问题。
您可以在创建整个 UI 后更改您的按钮(假设在打开时未修改 GUI)- 这样一来,每个框架/对话框只需要一个调用站点:
public static class FocusHelper {
public static void alterButtons(Component container) {
if (component instanceof Container) {
Component[] children = ((Container) component).getComponents();
for (Component child : children) {
alterButtons(child);
}
} else if (component instanceof JButton) {
((JButton) component).setRequestFocusEnabled(true);
}
}
}
辅助方法只是扫描整个组件层次结构以查找按钮并为每个 JButton 调用 setRequestFocusEnabled()(您可能需要检查其他组件类型,如 AbstractButton,具体取决于您想要实现的目标)。您只需从创建 GUI 的任何地方调用该方法并传递顶级容器(JFrame、JDialog 或任何其他容器组件)。
关于java - Java中有没有一种方法可以使按钮默认在点击时获得焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12420221/