在我的应用程序中,我有一个显示一组子菜单的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秒延迟下一个菜单。
有没有办法延迟弹出窗口?
答案 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的特质 的实施方式。