如何在不窃取焦点的情况下显示 JPopupMenu?

How to show a JPopupMenu without stealing focus?

我正在 Java Swing 中编写程序,在该程序中将有一个搜索栏(将是一个 JTextField),当在此字段中输入内容时,我想显示搜索会在搜索栏正下方生成一个弹出菜单,就像 Google 一样。我不必实际用搜索结果填充菜单(我目前有一个带有固定项目的测试菜单),我遇到了这样一个问题,即每次在字段中输入一个新字符时,焦点就会从字段中移开,到弹出菜单上。我正在使用

show(Component invoker, int x, int y)

显示菜单,调用者是文本字段或包含框。正如我所说,每次调用此函数时,弹出菜单都会将焦点从文本框上移开,这是一个大问题。我可以使用这些代替显示方法:

setLocation(int x, int y)
setVisible(boolean b)

但是,如果没有调用程序,弹出菜单不会相对于搜索栏显示,当我使用 setInvoker(Component invoker) 时,我遇到了与 show 方法相同的问题。我无法在初始化期间设置调用程序,因为那时调用程序不可见。那么,如何在不将焦点从搜索文本字段移开的情况下使用调用程序创建此 popupMenu?或者有更好的方法来完成我想要完成的事情吗?

你试过requestFocusInWindow()了吗?我认为您需要将焦点返回到弹出菜单代码末尾的搜索文本字段。我假设您有一些代码来创建弹出菜单。将 searchTextField.requestFocusInWindow() 添加到此代码的末尾。如果这没有帮助,那么我需要更多信息。更多代码会有所帮助。

popup.setFocusable(false);

对我有用