0

在我的应用程序中,我有一个显示一组子菜单的 JPopupMenu:

private static JMenu createMenu(String title) {
    JMenu menu = new JMenu(title);
    menu.setDelay(2000);
    menu.add(new JMenuItem("123"));
    menu.add(new JMenuItem("234"));
    menu.add(new JMenuItem("345"));
    return menu;
}

public static void main(String[] args) {
    JFrame frame = new JFrame("Hello");
    final JButton button = new JButton("Test");
    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            JPopupMenu jpm = new JPopupMenu();
            jpm.add(createMenu("XXX"));
            jpm.add(createMenu("YYY"));
            jpm.add(createMenu("ZZZ"));
            jpm.show(button, 0, 0);
        } 
    });

    frame.add(button);

    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
}

此应用程序通常在 Windows 上运行。

我首先将鼠标悬停在第一个 XXX 子菜单上。有时,我不小心将鼠标移到 YYY 上,这会导致第一个子菜单立即消失。

从阅读 Javadoc 看来,调用 JMenu.setDelay(2000) 似乎应该建议 JMenu 的弹出菜单在弹出之前等待 2 秒。但是,它似乎只会在弹出之前将下一个菜单延迟 2 秒。

有没有办法延迟弹出?

4

1 回答 1

1

更新

这里有一些有趣的东西;来自Bug #6563939在隐藏 JMenu 之前应尊重延迟,自 2007 年以来开放

Javadoc 在这一点上可能会产生误导。它说“在弹出或弹出子菜单之前”。“向下弹出”可以理解为“隐藏”,而是“子菜单呈现在其父菜单下方”的含义。


似乎也表明这取决于您使用的 L&F,因此它看起来更像是您只能请求或提示的东西:

每种外观 (L&F) 都可以确定它自己的观察延迟属性的策略。在大多数情况下,顶级菜单或拖动时不会观察到延迟。此方法是外观代码的一个属性,用于管理各种 UI 实现的特性。

于 2011-03-09T02:38:13.197 回答