JMenu setDelay()弹出延迟

时间:2011-03-09 02:27:59

标签: java swing jmenu jmenupopup

在我的应用程序中,我有一个显示一组子菜单的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秒延迟下一个菜单。

有没有办法延迟弹出窗口?

1 个答案:

答案 0 :(得分:1)

<强>更新

这里有一些有趣的东西;来自Bug #6563939 Delay should be respected before hiding a JMenu, open since 2007

  

Javadoc可能会误导这一点   点。它说“在子菜单之前   弹出或弹出“。”弹出“   可以被理解为“隐藏”,但是   它具有“子菜单”的含义   在他的父菜单下面呈现“。


它也是seems to suggest that this depends on the L&F you're using,所以它看起来更像是你只能请求或暗示的东西:

  

每个外观(L&amp; F)可以确定   这是观察自己的政策   延迟财产。在大多数情况下,   顶级没有观察到延迟   菜单或拖动时。这种方法   是一种外观和感觉的属性   代码,用于管理   各种UI的特质   的实施方式。