2011-05-12 16 views
11

¿Sería posible crear un JMenuItem personalizado que contenga botones? Por ejemplo, ¿sería posible crear un con un artículo similar a este:JMenuItems personalizados en Java

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

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

el enlace a la imagen se abre una página en blanco – kleopatra

Respuesta

4

. Dudo que haya una manera fácil de hacerlo. Se puede hacer algo como:

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); 

Pero hay varios problemas:

a) el menú no se cierra cuando se hace clic en el botón. Entonces, ese código debería agregarse a su ActionListener

b) el elemento del menú no responde a eventos clave como la flecha izquierda/derecha, por lo que no hay forma de colocar el foco en el botón con el teclado. Esto implicaría cambios de UI en el elemento del menú y no tengo idea de dónde comenzar para esto.

Solo usaría el diseño de IU estándar y crearía submenús.

+1

1 de las normas – kleopatra

1

Estoy seguro de que es, igual que personalmente me gustaría utilizar los elementos del menú individuales y simplemente ponerlos al lado del otro y tener un oyente de acción para cada botón individual. La parte difícil sería ponerlos dentro de un contenedor como un JPanel y ponerlos en un diseño de flujo o un diseño de cuadrícula

0
:-)

vieja pregunta, pero se puede hacer esto con bastante facilidad con un 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); 
Cuestiones relacionadas