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

时间:2015-05-20 00:20:39

标签: java swing jpopupmenu

我正在Java Swing中编写一个程序,在这个程序中会有一个搜索栏(它将是一个JTextField),当这个字段中有内容输入时,我想直接在弹出菜单中显示搜索结果在搜索栏下面,就像谷歌一样。我没有用搜索结果实际填充菜单(我目前有一个带有固定项目的测试菜单),我坚持的问题是,每次在字段中键入一个新字符焦点都会从字段中删除进入弹出菜单。我正在使用

show(Component invoker, int x, int y)

显示菜单,调用者是文本字段或包含框。正如我所说,每次调用此函数时,弹出菜单都会将焦点从文本框中移开,这是一个很大的问题。我没有使用这种show方法,而是可以使用它们:

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

popup.setFocusable(false);

为我工作