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