Изменение размера JPopupMenu и устранение проблемы «мерцания» - PullRequest
0 голосов
/ 27 мая 2010

Я пытаюсь реализовать всплывающий список результатов поиска, подобный стилю, найденному здесь:

http://www.inquisitorx.com/

(Я не пытаюсь реализовать поиск в Google, я просто использую это как пример грубого стиля, над которым я работаю.)

В любом случае, я реализую это, используя JList, содержащийся в JPopupMenu, который появляется под JTextField.

Когда пользователь вводит условия поиска, список изменяется, отражая различные результаты сопоставления. Затем я звоню pack на JPopupMenu, чтобы изменить его размер. Это работает, однако, оно создает небольшой эффект мерцания, поскольку фактически скрывает всплывающее окно и показывает всплывающее окно. (См. Закрытый метод getPopup в JPopupMenu, где он явно делает это.)

Есть ли способ просто заставить его просто изменить размер (кроме использования JWindow)?

Ответы [ 3 ]

2 голосов
/ 21 декабря 2013

мне работают:

popup.pack ();

popup.validate ();

эта работа в linux с версией Java "1.6.0_34". Я не знаю, что это работа на окнах.

1 голос
/ 29 апреля 2015

Метод setSize () не работал в моем случае. Подход popup.pack () работал, но также приводил к мерцанию. Лучшее решение, которое я нашел, было найдено здесь . Короче говоря:

    Window window = SwingUtilities.getWindowAncestor(popupMenu);
    window.pack();
    window.validate();
0 голосов
/ 28 мая 2010

Вы пробовали setSize()? Похоже, что это обрабатывается в JComponent и может избежать проблем с перерисовкой.

Я думаю, что проблема, к которой обращается getPopup, заключается в том, что делать, когда размеры всплывающего окна не помещаются в окне. Когда это происходит, оно возвращается от легкого компонента к тяжелому, и это определенно требует прятки. Итак, я думаю, если вы можете гарантировать, что ваше всплывающее окно не будет выходить за пределы окна, setSize может помочь.

...