1

我正在尝试实现类似于此处找到的样式的搜索结果弹出列表:

http://www.inquisitorx.com/

(我并没有尝试实现 Google 搜索,我只是将其用作我正在研究的风格的粗略示例。)

无论如何,我通过使用JList包含在 a中的 a 来实现这一点,它在 aJPopupMenu下方弹出JTextField

当用户输入搜索词时,列表会发生变化以反映不同的匹配结果。然后我呼吁调整它pack的大小。JPopupMenu这可行,但是,它会产生轻微的闪烁效果,因为它实际上隐藏了弹出窗口并显示了一个弹出窗口。(请参阅它明确执行此操作的私有方法getPopup。 )JPopupMenu

有没有办法让它只是调整自己的大小(除了使用 a JWindow)?

4

3 回答 3

2

对我来说工作:

popup.pack();

popup.validate();

这项工作在 linux 中使用 java 版本“1.6.0_34”。我不知道这是否适用于Windows。

于 2013-12-21T13:47:04.370 回答
1

setSize() 方法在我的情况下不起作用。popup.pack() 方法确实有效,但也导致了闪烁。我找到的最好的解决方案是在这里找到的。简而言之:

    Window window = SwingUtilities.getWindowAncestor(popupMenu);
    window.pack();
    window.validate();
于 2015-04-29T17:15:45.183 回答
0

你试过setSize()吗?看起来这已经得到处理,JComponent并且可能会避免重绘问题。

我认为getPopup要解决的问题是当弹出窗口的尺寸不适合窗口时该怎么办。当这种情况发生时,它会从一个轻量级的组件退回到一个重量级的组件,这肯定需要隐藏和展示。所以,我认为如果你能保证你的弹出窗口不会超出窗口,那么 setSize 可能会起作用。

于 2010-05-27T20:45:50.857 回答