Quiero crear una barra de herramientas en mi aplicación. Si hace clic en un botón en esa barra de herramientas, aparecerá un menú, al igual que en la barra de herramientas de Eclipse. No sé cómo hacer esto en Swing. ¿Puede alguien ayudarme por favor? Probé con Google pero no encontré nada.¿Cómo crear un JButton con un menú?
Respuesta
Esto es mucho más difícil en Swing de lo necesario. Entonces, en lugar de apuntarle a tutoriales, he creado un ejemplo completamente funcional.
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class ToolbarDemo {
public static void main(String[] args) {
final JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(600, 400));
final JToolBar toolBar = new JToolBar();
//Create the popup menu.
final JPopupMenu popup = new JPopupMenu();
popup.add(new JMenuItem(new AbstractAction("Option 1") {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(frame, "Option 1 selected");
}
}));
popup.add(new JMenuItem(new AbstractAction("Option 2") {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(frame, "Option 2 selected");
}
}));
final JButton button = new JButton("Options");
button.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
popup.show(e.getComponent(), e.getX(), e.getY());
}
});
toolBar.add(button);
frame.getContentPane().add(toolBar, BorderLayout.NORTH);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Creo que es lo mismo que en AWT.
Debe poner un ActionCommand en ese botón y cuando se ejecuta, muestre el menú emergente de acuerdo con las coordenadas del mouse.
no estoy seguro le he entendido bien, pero si quieres saber cómo hacer que las barras de herramientas de verificación de oscilación esta
Consulte la sección Arranque de una Menú emergente, en How to Use Menus.
sólo que este es el vínculo más específico: http://docs.oracle.com/javase/tutorial/uiswing/components/menu .html # popup – pratikabu
no veo por qué esto es más difícil de lo que debe ser o por qué se debe utilizar un MouseListener. La solución de Steve McLeod funciona, pero donde aparece el menú depende de dónde se hizo clic en el mouse. ¿Por qué no usar simplemente un ActionListener como se usa normalmente para un JButton? No parece ser más difícil ni menos difícil.
final JPopupMenu menu = new JPopupMenu();
menu.add(...whatever...);
final JButton button = new JButton();
button.setText("My Menu");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
menu.show(button, button.getBounds().x, button.getBounds().y
+ button.getBounds().height);
}
});
Esto posiciona el menú casi lo mismo que un menú en una JMenuBar para mí, y la posición es consistente. Puede colocarlo de manera diferente modificando x e y en menu.show().
El problema con el enfoque es que el menú emergente solo aparece cuando el usuario suelta el botón del mouse. El menú debería aparecer sobre el mouse hacia abajo, no hacia arriba con el mouse –
Tienes razón. No me di cuenta. Todavía me gusta más que a la inversa, pero ninguno es completamente satisfactorio. Terminé no implementando lo que estaba tratando de hacer de esa manera y no lo usé de todos modos. Supongo que puedes hacer lo que hiciste y usar mi versión del menú. Muestra las coordenadas del botón para evitar la incoherencia de la posición. –
Esta es una respuesta mucho mejor y debería obtener más votos. Se ve mejor que tener la ubicación del clic del mouse. – rsman
Aquí es un sencillo y agradable clase
import javax.swing.JPopupMenu;
import javax.swing.JToggleButton;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class MenuButton extends JToggleButton {
JPopupMenu popup;
public MenuButton(String name, JPopupMenu menu) {
super(name);
this.popup = menu;
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ev) {
JToggleButton b = MenuButton.this;
if (b.isSelected()) {
popup.show(b, 0, b.getBounds().height);
} else {
popup.setVisible(false);
}
}
});
popup.addPopupMenuListener(new PopupMenuListener() {
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {}
@Override
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
MenuButton.this.setSelected(false);
}
@Override
public void popupMenuCanceled(PopupMenuEvent e) {}
});
}
}
- 1. Crear un JButton personalizado en Java
- 2. Crear un botón personalizado en Java con JButton
- 3. Cómo seleccionar realmente un JButton
- 4. Crear un menú vertical en un Wpf
- 5. ¿Cómo crear un menú programáticamente en Android?
- 6. ¿Cómo crear un botón con el menú desplegable?
- 7. Cómo crear un menú emergente con submenú en Java
- 8. ¿Cómo puedo crear un menú con pestañas en ASP.NET MVC?
- 9. ¿Cómo crear un menú contextual usando un archivo XML?
- 10. ¿Cómo crear un JButton personalizado en Java con una base de imagen?
- 11. Crear un menú jQueryUI 1.8 Button
- 12. WP7 ¿cómo hacer un menú con mosaicos?
- 13. ¿Cómo puedo crear un menú en HTML sin usar Javascript?
- 14. Cómo crear un menú contextual con el botón derecho para un botón en WPF
- 15. ¿Cómo agregar un ActionListener en un JButton en Java
- 16. Cómo puedo crear un menú contextual para la cuadrícula extjs
- 17. ¿Cómo hacer JButton con estilo plano simple?
- 18. Mostrar/ocultar un JPopupMenu desde un JButton; FocusListener no funciona?
- 19. Cómo crear JButton parcialmente transparente en JFrame completamente transparente?
- 20. ¿Cómo puedo crear un menú en el menú de inicio de mi programa?
- 21. cómo crear un dijit.Dialog con un dojox.grid.DataGrid
- 22. Cómo cambiar el aspecto de un JButton deshabilitado en java
- 23. ¿Cómo puedo hacer un menú de acordeón con CSS3?
- 24. ¿Cómo hacer un menú de opciones dinámicas?
- 25. Crear un menú desde el archivo web.sitemap en ASP.NET
- 26. Haciendo un JButton se puede hacer clic en un JTable
- 27. cambiar el tamaño de un ImageIcon en un JButton
- 28. Java: ¿Cómo puedo agregar un JMenu a un JPanel o crear un botón desplegable?
- 29. Crear un menú UL anidado basado en la estructura ruta URL de elementos de menú
- 30. Crear un menú desplegable en C# ASP.NET MVC
He estado haciendo algo como esto, pero sin JToolBar. ¿Su solución tiene el comportamiento de que si vuelve a hacer clic en el botón con el menú desplegable, aparece el menú nuevamente, en lugar de descartarlo? –
También hice algo ligeramente diferente: popup.show (c, 0, c.getHeight()); –
Gracias. Esta es la solución más fácil de entender que he encontrado, así que la usaré aunque no sea exactamente un Dropdown JButton. Las otras soluciones son demasiado complicadas para que las pueda entender. He enumerado algunos de ellos a continuación.
Dikei