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

我的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组件交互时,这将输出焦点所有者,并且通常可用于调试焦点问题。