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

标签 java swing jpopupmenu

我正在用Java Swing编写一个程序,在这个程序中会有一个搜索栏(这将是一个JTextField),当在这个字段中输入一些内容时,我想直接在弹出菜单中显示搜索结果就像谷歌一样,位于搜索栏下方。我不必实际用搜索结果填充菜单(我目前有一个包含固定项目的测试菜单),我遇到了这样的问题:每次在字段中输入新字符时,焦点都会从字段中移开,并且到弹出菜单上。我正在使用

show(Component invoker, int x, int y)

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

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

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

最佳答案

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

关于java - 如何在不窃取焦点的情况下显示 JPopupMenu?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30338240/

相关文章:

java - 如何在 Java 中正确使用 try-catch-finally block ?

java - 以编程方式编写 gui,还是使用高级 gui 编辑器 (Java Swing)?

java - JPopupMenu 的 JMenuItem 的热键

java - 在打开时更新 JPopupMenu 菜单项

java - Vaadin 将图像设置为背景

java - Oracle JDBC 在 Linux 上没有给出预期的输出

java - 计算行进距离-Android

java - JLabel 调整 JPanel 大小

java - 将形状添加到类属性