2015-04-09 5 views
-1

Мне нужно создать comboBox с несколькими chechboxes в моем java swing gui. Моя первая мысль заключалась в создании пользовательского comboBox со своим собственным CellRenderer, но затем я решил пойти с более «дружественным» решением и использовать JMenu с элементами JCheckBox внутри.JMenu не активен внутри JPanel

Проблема в том, что когда я создаю меню и размещаю его внутри своего JPanel, меню неактивно и не открывается при нажатии. Какие идеи могут быть причиной такого поведения? Можно ли даже использовать JMenu?

Это пример моего кода:

JMenu menu; 
panelCenter.add(new JLabel("Selection"));; 
panelCenter.add(prepareSelection(menu)); 

private JMenu prepareSelection(JMenu menu) { 
     menu = new JMenu("Select items"); 

     for (int i = 0; i < 10; i++) { 
      JCheckBoxMenuItem item = new JCheckBoxMenuItem("item " + i); 
      menu.add(item); 
     } 

     return menu; 
    } 

Спасибо за любую помощь!

+1

Кажется, что [это] (http://stackoverflow.com/questions/1573159/java-check-boxes-in-a-jcombobox) может вам помочь. – alex2410

+1

* «Возможно ли использовать JMenu так?» * Почему «setJMenuBar» не работает для этого графического интерфейса? Возможно, панели требуется [всплывающее меню] (https://docs.oracle.com/javase/8/docs/api/javax/swing/JPopupMenu.html) вместо этого. –

ответ

0

решаемая. Сначала добавили JMenuBar в мой JPanel, а затем добавили JMenus к нему.

menuBar = new JMenuBar(); 
prepareSelection(menuInput); // prepare menus 
prepareSelection(menuOutput); 
panelCenter.add(menuBar); 
2

Место для добавления JMenuBar не находится в JPanel, но в layeredPane. Вы должны добавить JMenuBar, и он будет находиться в верхней части layeredPane. Остальная часть будет покрыта вашей contentPane. Как только JMenuBar встанет, вы можете изменить JMenus и JMenuItems в любое время.

Вот картинка из Ивора Хортона Beginning Java: enter image description here

+1

..glad вы восстановили этот ответ. :) –

+0

На самом деле, я решил проблему, сначала создав JMenuBar (который на самом деле может быть добавлен в JPanel, а затем добавлен JMenu) – Smajl

+0

Вы можете, тем не менее, добавить JMenuBar к СЕВЕРУ панели с BorderLayout, а также параллельно JMenuBar в layeredPane, где он должен быть. Тем не менее ваше приложение будет выглядеть довольно странно. Было бы более «нормально» использовать всплывающее меню, например, @AndrewThompson, предложенное выше. –

 Смежные вопросы

  • Нет связанных вопросов^_^