我的TextField
中有几个Frame
。我想知道哪个TextField
目前有焦点。我怎样才能找到这些信息?
答案 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
的实例