32

TextFieldFrame. 我想知道TextField当前有哪些重点。我怎样才能找到这些信息?

4

9 回答 9

38
KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()
于 2012-08-02T04:41:14.107 回答
36

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

于 2009-04-06T03:56:49.593 回答
3

getFocusOwner()将返回当前焦点所在的子组件。

但是您必须检查它是否是 JTextField。如果其他组件(例如按钮)也存在于您的框架中,它们可能会被聚焦。

于 2009-04-06T03:57:07.517 回答
3

也看看javax.swing.FocusManager

于 2009-04-06T12:11:52.740 回答
3

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

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

这会在您与 Swing 组件交互时输出焦点所有者,并且通常对于调试焦点问题很有用。

于 2018-09-26T08:40:23.730 回答
1

每个 JComponent 都有一个 hasFocus 方法,您可以使用该方法检查它是否具有焦点。但是,这已被更改,现在您应该使用 isFocusOwner。

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

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

于 2009-04-06T03:56:29.110 回答
1

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

于 2013-07-25T07:19:58.000 回答
0

教程应该对理解焦点很有帮助。

于 2009-04-06T03:55:59.203 回答
0

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

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

之后你可以检查是否focusOwner是实例TextField

于 2019-11-28T14:13:01.407 回答