Пользовательские JMenuItems в Java - PullRequest
11 голосов
/ 12 мая 2011

Можно ли создать пользовательский JMenuItem, содержащий кнопки?Например, можно ли создать JMenuITem с элементом, похожим на этот:

screenshot of Google Chrome's customize and control menu with the edit menu item circled

+----------------------------------------+
| JMenuItem [ Button | Button | Button ] |
+----------------------------------------+

Ответы [ 3 ]

4 голосов
/ 12 мая 2011

Я сомневаюсь, что есть простой способ сделать это. Вы можете сделать что-то вроде:

JMenuItem item = new JMenuItem("Edit                       ");
item.setLayout( new FlowLayout(FlowLayout.RIGHT, 5, 0) );
JButton copy = new JButton("Copy");
copy.setMargin(new Insets(0, 2, 0, 2) );
item.add( copy );
menu.add( item );

Но есть несколько проблем:

а) меню не закрывается при нажатии на кнопку. Так что этот код нужно будет добавить в ваш ActionListener

b) пункт меню не реагирует на ключевые события, такие как стрелка влево / вправо, поэтому невозможно сфокусироваться на кнопке с помощью клавиатуры. Это будет связано с изменениями пользовательского интерфейса в пункте меню, и я понятия не имею, с чего начать.

Я бы просто использовал стандартный дизайн пользовательского интерфейса для создания подменю.

1 голос
/ 12 мая 2011

Я уверен, что есть, как и лично, я бы использовал отдельные пункты меню и просто помещал их рядом и имел слушателя действия для каждой отдельной кнопки.Сложной частью было бы поместить их в контейнер, такой как JPanel, и поместить их в макет потока или макет Grid

0 голосов
/ 15 мая 2015

Старый вопрос, но вы можете сделать это довольно легко с помощью JToolBar ...

    //Make a popup menu with one menu item
    final JPopupMenu popupMenu = new JPopupMenu();
    JMenuItem menuItem = new JMenuItem();

    //The panel contains the custom buttons
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
    panel.setAlignmentX(Component.LEFT_ALIGNMENT);       
    panel.add(Box.createHorizontalGlue());        
    JToolBar toolBar = new JToolBar();
    JButton toolBarButton = new JButton();
    toolBarButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            popupMenu.setVisible(false); //hide the popup menu
            //other actions
        }
    });
    toolBar.setFloatable(false);
    toolBar.add(toolBarButton);
    panel.add(toolBar);

    //Put it all together        
    menuItem.add(panel);        
    menuItem.setPreferredSize(new Dimension(menuItem.getPreferredSize().width, panel.getPreferredSize().height)); //do this if your buttons are tall
    popupMenu.add(menuItem);
...