Пользовательские JMenuItems в Java
Можно ли создать пользовательский JMenuItem
, содержащий кнопки? Например, можно было бы создать JMenuItem
с элементом, подобным этому:
![screenshot of Google Chrome's customize and control menu with the edit menu item circled]()
+----------------------------------------+
| JMenuItem [ Button | Button | Button ] |
+----------------------------------------+
Ответы
Ответ 1
Я сомневаюсь, что есть простой способ сделать это. Вы можете сделать что-то вроде:
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 );
Но есть несколько проблем:
a) меню не закрывается при нажатии на кнопку. Таким образом, код должен быть добавлен в ваш ActionListener
b) пункт меню не реагирует на ключевые события, такие как стрелка влево/вправо, поэтому нет способа разместить фокус на кнопке с помощью клавиатуры. Это будет включать изменения пользовательского интерфейса в пункт меню, и я не знаю, с чего начать для этого.
Я бы просто использовал стандартный дизайн пользовательского интерфейса для создания подменю.
Ответ 2
Я уверен, что есть. Как и лично, я бы использовал отдельные элементы меню и просто ставил их рядом друг с другом и слушал действия для каждой отдельной кнопки. Трудная часть будет помещать их в контейнер как JPanel и помещать их в макет потока или макет сетки
Ответ 3
Старый вопрос, но вы можете сделать это довольно легко с помощью 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);