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

Java 如何在不窃取焦点的情况下显示JPOppMenu?,java,swing,jpopupmenu,Java,Swing,Jpopupmenu,我正在用JavaSwing编写一个程序,在这个程序中会有一个搜索栏(这将是一个JTextField),当在这个字段中键入内容时,我希望在搜索栏正下方的弹出菜单中显示搜索结果,就像Google一样。我还没有真正用搜索结果填充菜单(我目前有一个带有固定项目的测试菜单),我陷入了这样一个问题:每次在字段中键入新字符时,焦点都会从字段中移到弹出菜单上。我正在使用 show(Component invoker, int x, int y) 显示菜单,调用程序为文本字段或包含框。正如我所说的,每次调用这个

我正在用JavaSwing编写一个程序,在这个程序中会有一个搜索栏(这将是一个JTextField),当在这个字段中键入内容时,我希望在搜索栏正下方的弹出菜单中显示搜索结果,就像Google一样。我还没有真正用搜索结果填充菜单(我目前有一个带有固定项目的测试菜单),我陷入了这样一个问题:每次在字段中键入新字符时,焦点都会从字段中移到弹出菜单上。我正在使用

show(Component invoker, int x, int y)
显示菜单,调用程序为文本字段或包含框。正如我所说的,每次调用这个函数时,弹出菜单都会将焦点从文本框中移开,这是一个大问题。我可以使用以下方法代替此显示方法:

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

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

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

popup.setFocusable(false);
为我工作

焦点丢失的“主要”原因是弹出窗口中有东西正在窃取它。好吧,
jpopmpmenu
本身不会改变焦点。考虑提供一个说明你的问题的方法。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。这将在show/setInvoker工作后立即执行requestFocusInWindow()操作,从而减少混乱并获得更好的响应。谢谢