在Java中是否有一种方法可以使按钮在默认情况下获得焦点

时间:2012-09-14 07:50:03

标签: java onclick click jbutton buttonclick

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

是否有一种简单的方法来更改默认行为,以便默认情况下按钮请求关注点击,例如通过设置某些属性?或者我需要一直打猎,并逐个打电话给.setRequestFocusEnabled(true)每个按钮?

2 个答案:

答案 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