Пользовательские JMenuItems в Java
можно ли создать пользовательскую JMenuItem
, которая содержит кнопки? Например, можно ли было бы создать JMenuITem
с элементом, подобным этому:
+----------------------------------------+
| JMenuItem [ Button | Button | Button ] |
+----------------------------------------+
3 ответов
Я сомневаюсь, что есть простой способ сделать это. Вы можете сделать что-то вроде:
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) пункт меню не реагирует на ключевые события, такие как стрелка влево/вправо, поэтому нет возможности поместить фокус на кнопку с помощью клавиатуры. Это будет включать изменения пользовательского интерфейса в пункт меню, и я понятия не имею с чего начать.
Я бы просто использовал стандартный дизайн пользовательского интерфейса для создания подменю.
Я уверен, что есть, как лично я бы использовать отдельные menuitems и просто положить их бок о бок и иметь слушателя действий для каждой отдельной кнопки. Хитрая часть будет помещать их в контейнер, такой как JPanel, и помещать их в макет потока или макет сетки
старый вопрос, но вы можете сделать это довольно легко с помощью 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);