似乎JButton
在点击时不会自动获得焦点,除非我使用.setRequestFocusEnabled(true)
明确配置了按钮。我正在使用的应用程序在很多不同的地方创建了很多按钮(即不是通过工厂方法),我需要所有按钮在点击时请求焦点。
是否有一种简单的方法来更改默认行为,以便默认情况下按钮请求关注点击,例如通过设置某些属性?或者我需要一直打猎,并逐个打电话给.setRequestFocusEnabled(true)
每个按钮?
答案 0 :(得分:1)
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或任何其他Container组件)。
答案 1 :(得分:0)
也许你可以创建一个继承自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对象替换所有的JButton