似乎JButton
单击时不会自动获得焦点,除非我使用.setRequestFocusEnabled(true)
. 我正在使用的应用程序在许多不同的地方创建了很多按钮(即不是通过工厂方法),我需要所有这些按钮在单击时请求焦点。
有没有一种简单的方法来更改默认行为,以便按钮默认要求点击焦点,例如通过设置一些属性?或者我需要把他们全部追捕并.setRequestFocusEnabled(true)
一个一个地按下每个按钮?
似乎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 或任何其他容器组件)。
也许您可以创建一个继承自 JButton 的子类并在那里实现功能:
public class MyJButton extends JButton {
public MyJButton(String string, Icon icon) {
super(string, icon);
this.setRequestFocusEnabled(true);
}
public MyJButton(Action action) {
super(action);
this.setRequestFocusEnabled(true);
}
public MyJButton(String string) {
super(string);
this.setRequestFocusEnabled(true);
}
public MyJButton(Icon icon) {
super(icon);
this.setRequestFocusEnabled(true);
}
public MyJButton() {
super();
this.setRequestFocusEnabled(true);
}
}
现在你必须用 MyJButton 对象替换你所有的 JButtons