2013-03-28 2 views
1

Вот что я хочу сделать. Я делаю всплывающее окно, которое предлагает слова, 10 за раз, с возможностью отображать следующие 10 предложений. Я разработал это как JPopupMenu с 11 элементами; 10 предложений и один вариант «Показать больше ...».Сделать JPopupMenu НЕ закрытием выбора позиции

enter image description here

код, который запускается на «Показать больше ...» удаляет все предыдущие элементы, и добавляет новые (достаточно простые).

Проблема в том, что когда я нажимаю «Показать больше ...», JPopupMenu закрывается (как я полагаю, это поведение по умолчанию). Я пробовал работать по этому пути, даже создав совершенно новое всплывающее окно и показывая его в том же месте.

Есть ли простой способ заставить JPopupMenu НЕ исчезнуть при нажатии одного из своих элементов? Спасибо заранее!

+1

для лучшей помощи скорее отправить [SSCCE] (http://sscce.org/), короткий, выполнимый, компилируемый, просто пустой 'JFrame' с вашим' JPopup' с 'JMenuItems' – mKorbel

ответ

0

Я использую это для CheckBox пунктов:

import javax.swing.JCheckBoxMenuItem; 
import javax.swing.JComponent; 
import javax.swing.MenuSelectionManager; 
import javax.swing.plaf.ComponentUI; 
import javax.swing.plaf.basic.BasicCheckBoxMenuItemUI; 

public class StayOpenCheckBoxMenuItemUI extends BasicCheckBoxMenuItemUI { 

    @Override 
    protected void doClick(MenuSelectionManager msm) { 
     menuItem.doClick(0); 
    } 

    public static ComponentUI createUI(JComponent c) { 
     return new StayOpenCheckBoxMenuItemUI(); 
    } 

} 

Затем зарегистрировать его:

myJCheckBoxMenuItem.setUI(new StayOpenCheckBoxMenuItemUI()); 

В зависимости от того, какого типа пункта меню вашего «Показать больше» пункт есть, аналогичный раствор должно сработать. Просто подклассом соответствующего пользовательского интерфейса вместо BasicCheckBoxMenuItemUI.

+0

Этот подход, похоже, работает когда вы нажимаете элемент всплывающего окна с помощью мыши, но НЕ при использовании горячей клавиши ускорителя (и это то, что мне тоже хотелось бы). – Bystam