我TextField
的Frame
. 我想知道TextField
当前有哪些重点。我怎样才能找到这些信息?
9 回答
KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()
JFrame.getFocusOwner()
(继承自Window.getFocusOwner()
)应该返回对具有焦点的组件的引用。getMostRecentFocusOwner()
可能也很有趣。
getFocusOwner()将返回当前焦点所在的子组件。
但是您必须检查它是否是 JTextField。如果其他组件(例如按钮)也存在于您的框架中,它们可能会被聚焦。
您还可以在键盘焦点管理器中监听适当的属性更改:
KeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener("focusOwner", new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
System.out.println(evt.getNewValue());
}
});
这会在您与 Swing 组件交互时输出焦点所有者,并且通常对于调试焦点问题很有用。
每个 JComponent 都有一个 hasFocus 方法,您可以使用该方法检查它是否具有焦点。但是,这已被更改,现在您应该使用 isFocusOwner。
因此,遍历框架中的所有文本字段,并通过调用该方法检查每个文本字段是否为 isFocusOwner。
您还可以让焦点所有者通过框架。
KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()
;
不会跨线程工作。因此,如果您的应用程序调用一个新线程并且该线程具有自己的框架/窗口等,那么它将无法从该线程获得焦点所有者。而是使用:KeyboardFocusManager.getCurrentKeyboardFocusManager().getGlobalFocusOwner();
本教程应该对理解焦点很有帮助。
您可以像这样获得当前关注的组件:
Component focusOwner = FocusManager.getCurrentManager().getFocusOwner();
之后你可以检查是否focusOwner
是实例TextField