JMenu setDelay () задержка всплывающего окна - PullRequest
0 голосов
/ 09 марта 2011

В моем приложении у меня есть 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 Ответ

1 голос
/ 09 марта 2011

Обновление

Вот кое-что интересное;от Ошибка # 6563939 Задержка должна быть соблюдена, прежде чем скрывать JMenu , открытый с 2007 года

В этом пункте Javadoc может вводить в заблуждение.Он говорит: «прежде чем подменю выскочит вверх или вниз».«Высовывать» можно понимать как «скрытие», но оно скорее имеет значение «подменю отображается ниже его родительского меню».


Это также , по-видимому, предполагает, чтоэто зависит от L & F, который вы используете , так что это больше похоже на то, что вы можете только запросить или намекнуть:

Каждый внешний вид (L & F) может определять его собственную политику длясоблюдая свойство задержки.В большинстве случаев задержка не наблюдается для меню верхнего уровня или при перетаскивании.Этот метод является свойством внешнего вида кода и используется для управления особенностями различных реализаций пользовательского интерфейса.

...