HOWTO · Java
Crear un menú desplegable en Java
Este tutorial enseña cómo crear un menú desplegable en Java.
En esta página
En Swing, usa JOptionPane para ofrecer una opción puntual en un diálogo, o JComboBox cuando el menú desplegable forme parte de una ventana. El método del diálogo devuelve el valor seleccionado cuando el usuario confirma; el control integrado mantiene su selección actual disponible para el resto de la ventana.
Crear un menú desplegable con JOptionPane en Java
JOptionPane.showInputDialog puede mostrar un arreglo de opciones y devolver el elemento seleccionado. Sus argumentos incluyen el componente principal, el mensaje, el título del diálogo, el tipo de mensaje, un icono opcional, las opciones y la selección inicial. La selección inicial debe ser una de las opciones. En este ejemplo, options[1] establece Orange como opción predeterminada. Cuando el usuario confirma, el método devuelve la cadena elegida. Si cierra el diálogo, devuelve null; comprueba ese resultado antes de usar la selección.
Ejecuta este ejemplo en la consola para ver la selección predeterminada. Establece la propiedad del sistema Java show.gui en true para abrir el diálogo de Swing en un entorno de escritorio gráfico:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import javax.swing.JOptionPane;
public class DropDown {
public static void main(String[] args) {
String[] options = {"Apple", "Orange", "Banana", "Pineapple", "None of the listed"};
String selectedFruit;
if (Boolean.getBoolean("show.gui")) {
selectedFruit = (String) JOptionPane.showInputDialog(
null,
"What fruit do you like the most?",
"Choose Fruit",
JOptionPane.QUESTION_MESSAGE,
null,
options,
options[1]);
} else {
selectedFruit = options[1];
}
if (selectedFruit == null) {
System.out.println("No fruit selected.");
} else {
System.out.println("Your chosen fruit: " + selectedFruit);
}
}
}
Your chosen fruit: Orange
En la ejecución predeterminada en la consola, el programa imprime la opción inicial. Con show.gui activado, el usuario puede cambiarla; al confirmar, se imprime ese valor, mientras que al cerrar el diálogo se imprime el mensaje de cancelación. La ruta del diálogo requiere un entorno de escritorio gráfico. El texto que muestra el ejemplo dentro de los bloques permanece en inglés.
Crear un menú desplegable con JComboBox en Java
Usa JComboBox cuando el usuario deba elegir una opción dentro de una ventana. El ejemplo incluye una ejecución en la consola que imprime una opción representativa y una ruta gráfica opcional que muestra el menú desplegable, un botón Done y una etiqueta con el resultado. La etiqueta del botón permanece en inglés en el ejemplo. Un JPanel con FlowLayout organiza los componentes y permite que la etiqueta use su tamaño preferido, por lo que no se superpone al botón. El listener lee getSelectedItem() cuando se hace clic en el botón y actualiza la etiqueta.
Ejecuta el ejemplo en la consola para ver la selección de muestra. Establece show.gui en true para mostrar la ventana de Swing:
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class ComboBoxExample {
public static void main(String[] args) {
if (Boolean.getBoolean("show.gui")) {
SwingUtilities.invokeLater(() -> {
String[] options = {"Apple", "Orange", "Banana", "Pineapple", "None of the listed"};
JComboBox<String> fruitBox = new JComboBox<>(options);
JButton doneButton = new JButton("Done");
JLabel resultLabel = new JLabel("Choose a fruit, then click Done.");
doneButton.addActionListener(event ->
resultLabel.setText("You selected " + fruitBox.getSelectedItem()));
JPanel panel = new JPanel(new FlowLayout());
panel.add(fruitBox);
panel.add(doneButton);
panel.add(resultLabel);
JFrame frame = new JFrame("Choose a Fruit");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
} else {
String selectedFruit = "Orange";
System.out.println("You selected " + selectedFruit);
}
}
}
You selected Orange
En la ruta gráfica, JComboBox selecciona inicialmente su primer elemento, Apple. El listener de acción lee la selección actual solo después de hacer clic en Done; entonces la etiqueta muestra ese valor. La etiqueta del resultado y el texto que aparece dentro de los bloques de código permanecen en inglés. La ruta de consola imprime una muestra fija para demostrar el flujo de selección sin abrir una ventana.
Elige JOptionPane para una pregunta breve y puntual cuyo resultado se procesa de inmediato. Elige JComboBox cuando la selección sea un control más dentro de un JFrame o cuando el usuario pueda cambiarla mientras la ventana siga abierta. Ambas rutas gráficas requieren un entorno de escritorio; las rutas predeterminadas de consola se ejecutan sin crear ventanas de Swing.