代码之家  ›  专栏  ›  技术社区  ›  Avrom

调整jpopupmenu的大小并避免“闪烁”问题

  •  0
  • Avrom  · 技术社区  · 16 年前

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

    http://www.inquisitorx.com/

    (我不是在尝试实现谷歌搜索,我只是把它作为我正在研究的风格的一个粗略的例子。)

    无论如何,我是通过使用 JList 包含在 JPopupMenu 它在一个 JTextField .

    当用户输入搜索词时,列表将更改以反映不同的匹配结果。然后我打电话 pack 弹出式菜单 调整大小。 但是,这会产生轻微的闪烁效果,因为它实际上隐藏了弹出窗口并显示了弹出窗口。(参见私有方法 getPopup 在里面 弹出式菜单 它明确地这样做。)

    有什么方法可以让它自己调整大小(除了使用 JWindow )?

    3 回复  |  直到 11 年前
        1
  •  0
  •   Devon_C_Miller    16 年前

    你试过了吗? setSize() ?看来这件事已经解决了 JComponent 可以避免重新喷漆的问题。

    我认为问题是 getPopup 当弹出窗口的尺寸不适合窗口时,寻址就是要做的事情。当这种情况发生时,它会从一个轻量级的组件下降到一个重量级的组件,这绝对需要一个隐藏和显示。所以,我认为如果你能保证你的弹出窗口不会超出窗口,设置大小可能会做到这一点。

        2
  •  2
  •   Ezequiel    12 年前

    对我的工作:

    POPUP .PACK();

    popup.validate();

    这项工作在Linux中使用Java版本“1.60y34”。我不知道那是在窗户上用的。

        3
  •  1
  •   zivke85    11 年前

    在我的例子中,setSize()方法不起作用。popup.pack()方法确实有效,但也导致了闪烁。我找到的最佳解决方案是 here . 简而言之:

        Window window = SwingUtilities.getWindowAncestor(popupMenu);
        window.pack();
        window.validate();