2

似乎JButton单击时不会自动获得焦点,除非我使用.setRequestFocusEnabled(true). 我正在使用的应用程序在许多不同的地方创建了很多按钮(即不是通过工厂方法),我需要所有这些按钮在单击时请求焦点。

有没有一种简单的方法来更改默认行为,以便按钮默认要求点击焦点,例如通过设置一些属性?或者我需要把他们全部追捕并.setRequestFocusEnabled(true)一个一个地按下每个按钮?

4

2 回答 2

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 或任何其他容器组件)。

于 2012-09-14T15:31:16.337 回答
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 对象替换你所有的 JButtons

于 2012-09-14T08:20:42.800 回答