如何找出当前具有焦点的对象

时间:2009-04-06 03:51:09

标签: java swing focus

我的TextField中有几个Frame。我想知道哪个TextField目前有焦点。我怎样才能找到这些信息?

9 个答案:

答案 0 :(得分:30)

JFrame.getFocusOwner()(继承自Window.getFocusOwner())应该返回对具有焦点的组件的引用。 getMostRecentFocusOwner()也可能是有意义的。

答案 1 :(得分:26)

KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()

答案 2 :(得分:3)

答案 3 :(得分:2)

getFocusOwner()将返回当前关注的子组件。

但你必须检查它是否是一个JTextField。如果它们存在于您的框架中,则按钮等其他组件可能会被聚焦。

答案 4 :(得分:1)

This教程应该非常有助于理解焦点。

答案 5 :(得分:1)

每个JComponent都有一个hasFocus方法,可用于检查它是否具有焦点。 但是,这已经改变了,现在你应该使用isFocusOwner。

因此,遍历框架中的所有文本字段,并通过调用该方法检查每个文本字段是否为isFocusOwner。

您还可以通过框架获得焦点所有者。

答案 6 :(得分:1)

KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
不会跨线程工作。因此,如果您的应用程序调用新线程并且该线程具有自己的框架/窗口等,那么它将无法从该线程获得焦点所有者。而是使用:KeyboardFocusManager.getCurrentKeyboardFocusManager().getGlobalFocusOwner();

答案 7 :(得分:1)

您还可以在键盘焦点管理器中监听适当的属性更改:

KeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener("focusOwner", new PropertyChangeListener() {
    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        System.out.println(evt.getNewValue());
    }
});

当您与Swing组件交互时,这将输出焦点所有者,并且对于调试一般的焦点问题很有用。

答案 8 :(得分:0)

您可以像这样获得当前关注的组件:

Component focusOwner = FocusManager.getCurrentManager().getFocusOwner();

之后,您可以检查focusOwner是否是TextField的实例