2013-03-08 2 views
0

Можно ли создать пользовательский JMenuItem, содержащий список флажков? Пример является первенствовать меню Фильтр всплывающее:Пользовательский JMenuItem

До сих пор, что я сделал, как это:

JPopupMenu headerPopup = new JPopupMenu(); 
JMenuItem clearfilter = new JMenuItem ("Clear Filter From Time"); 
JMenu filter = new JMenu("Number Filter"); 
filter.add(new JMenuItem("Equals..")); 
filter.add(new JMenuItem("Not Equal..")); 


JPanel checkBoxItems = new JPanel(); 

JCheckBox[] checkBoxes = new JCheckBox[200]; 
initList(checkBoxes); 
JList list = new CheckBoxList(); 
list.setModel(new ListModel(checkBoxes)); 
JScrollPane scrollPane = new JScrollPane(list); 

checkBoxItems.setLayout(new BorderLayout()); 
checkBoxItems.add(scrollPanel); 
JPanel buttonPanel = new JPanel(); 
buttonPanel.setLayout(new GridLayout(1, 3)); 
buttonPanel.add(new JPanel()); 
buttonPanel.add(new JButton("Ok")); 
buttonPanel.add(new JButton("Cancel")); 
checkBoxItems.add(buttonPanel, BorderLayout.SOUTH); 

headerPopup.add(clearfilter); 
headerPopup.add(filter); 
headerPopup.add(checkBoxItems); 

Содержание checkBoxItems панели является JList из JCheckBox и две кнопки. Проблема заключается в том, что курсор находится внутри панели, элемент меню «Фильтр номера» по-прежнему будет выбран, а PopupMenu будет отображаться, даже если курсор уже идет на панель.

Я попытался это, но не работать, любой другой путь ?:

checkBoxItems.addMouseListener(new MouseAdapter() 
    { 
     @Override 
     public void mouseEntered(MouseEvent e) 
     { 
      filter.setArmed(false); 
      filter.setSelected(false); 
     } 
    }); 
+0

Для лучшей помощи рано, опубликовать [SSCCE] (http://sscce.org/). –

ответ

2
  • использование JCheckBoxMenuItem, поместите их в ButtonGroup

  • checkBoxItems.addMouseListener(new MouseAdapter() должны быть ChangeListener вместе с getButtonModel

  • эти события реализованы в каталоге API ectly, не требуется, чтобы добавить MouseListener,

  • ButtonModel требуется только для части mouse and key events, которые не реализованы или не реализованы confortly в API

+0

JCheckBoxMenuItem работает хорошо, но наличие большого количества JCheckBoxMenuItem в меню кажется неуместным. – imarefe