1

我在 Java Swing 中创建了一个动态搜索字段。我有一个 JTextField,您可以在其中输入要搜索的内容,还有一个 JScrollPane 内的 JList,其中包含您输入的匹配项。当您在 JTextField 中写入时,它控制 JScrollPane:它的内容,以及它是否应该可见。

当我使用它创建示例窗口时它工作正常,但在我的大 GUI 中却不行。我无法解释 GUI,所以我不希望你完全解决这个问题,但也许可以回答一个关于它的问题。

问题是,当 JTextField 为空或我们没有找到匹配项时,列表被隐藏(setVisible(false))。当您开始输入并找到至少一项时,它会显示 (setVisible(true))。当我启动我的 GUI 并开始在搜索字段中输入内容时,列表没有按应有的方式显示。它根本不会出现。我已经调试了代码,并且滚动窗格设置为可见 = true。根据运行代码可见,但看不到也无法与之交互。它没有隐藏在其他东西后面。

现在到了有趣的事情。如果我输入一些应该会产生点击的内容,然后将鼠标悬停在 JTextField 上,激活它的工具提示,JScrollBar 就会出现!之后,搜索字段正常运行,直到我关闭窗口。可见标志没有改变,但不知何故,它决定现在我们可以绘制它。

现在我想知道,显示工具提示时会发生什么?有没有什么特别的画正在发生,我可以称自己为?

4

2 回答 2

2

您应该在调用revalidate()后调用包含滚动窗格和文本字段的组件setVisible。一般规则是,如果在容器布局并显示给用户之后revalidate更改容器组件的布局,则应该调用它。

让我知道这是否有帮助!

于 2012-06-12T05:55:45.077 回答
2

也许看看AutoComplete JComboBox / JTextField,因为 AutoComplete JComboBox不需要打扰JToolTip

于 2012-06-12T06:00:58.040 回答