我正在尝试实现类似于此处找到的样式的搜索结果弹出列表:
(我不打算实施Google搜索,我只是将其作为我正在研究的风格的粗略示例。)
无论如何,我使用JList
中包含的JPopupMenu
来实现此功能,JTextField
位于pack
下方。
当用户输入搜索字词时,列表会更改以反映不同的匹配结果。然后我在JPopupMenu
上调用getPopup
来调整大小。
但是,这会产生轻微的闪烁效果,因为它实际上隐藏了弹出窗口并显示弹出窗口。 (请参阅JPopupMenu
中明确执行此操作的私有方法JWindow
。)
有没有办法让它自己调整大小(除了使用{{1}})?
答案 0 :(得分:2)
给我工作:
<强> popup.pack(); 强>
<强> popup.validate(); 强>
这项工作在linux下用java版“1.6.0_34”。我不知道是在Windows上工作。
答案 1 :(得分:1)
setSize()方法在我的情况下不起作用。 popup.pack()方法确实有效,但也导致了闪烁。我找到的最佳解决方案是here找到的解决方案。简而言之:
Window window = SwingUtilities.getWindowAncestor(popupMenu);
window.pack();
window.validate();
答案 2 :(得分:0)
你试过setSize()
吗?它似乎在JComponent
处理,可能会避免重绘问题。
我认为getPopup
正在解决的问题是当弹出窗口的尺寸不适合窗口时要做什么。当发生这种情况时,它会从轻量级组件回落到重量级组件,这肯定需要隐藏和显示。所以,我认为如果你能保证你的弹出窗口不会延伸到窗口之外,那么setSize就可以解决这个问题。