Interfaces Tema 2
Componentes
Los componentes son las piezas que el usuario ve y usa: textos, botones, casillas, listas… Todos se crean con new, se meten en un panel con add(…) y tienen métodos para leer y cambiar lo que muestran.
Estos son los más usados (el código de cómo se colocan así lo verás en el tema de MigLayout):

Para escribir y mostrar texto#
| Componente | Para qué | Cómo se crea | Cómo se lee lo que tiene |
|---|---|---|---|
JLabel | Un texto que el usuario solo puede leer | new JLabel("Nombre:") | etiqueta.getText() |
JTextField | Una línea de texto que escribe el usuario | new JTextField(20) (20 = ancho, en letras) | campo.getText() |
JPasswordField | Como el anterior, pero con puntos en vez de letras | new JPasswordField(20) | new String(clave.getPassword()) |
JTextArea | Un texto de varias líneas | new JTextArea(4, 20) (4 filas, 20 de ancho) | area.getText() |
Para cambiar lo que muestran, setText("…"), en todos.
Importante
Un JTextArea se mete siempre dentro de un JScrollPane, que le pone barras de desplazamiento cuando el texto no cabe: panel.add(new JScrollPane(area));. Sin él, el área crece y empuja a todo lo demás.
Para elegir#
| Componente | Para qué | Cómo se crea | Cómo se lee lo elegido |
|---|---|---|---|
JCheckBox | Una casilla de sí o no | new JCheckBox("Recordarme") | casilla.isSelected() → true o false |
JRadioButton | Elegir una opción entre varias | new JRadioButton("Online") | opcion.isSelected() |
JComboBox | Una lista desplegable | new JComboBox<>(new String[] {"Junior", "Senior"}) | (String) lista.getSelectedItem() |
JSpinner | Un número, con flechas para subir y bajar | new JSpinner(new SpinnerNumberModel(16, 6, 99, 1)) (valor, mínimo, máximo, paso) | (int) numero.getValue() |
JSlider | Un valor en un rango, con una barra deslizante | new JSlider(0, 10, 7) (mínimo, máximo, valor) | deslizador.getValue() |
Los JRadioButton de una misma pregunta se meten en un ButtonGroup, para que al marcar uno se desmarque el otro:
Java
JRadioButton presencial = new JRadioButton("Presencial", true); // true: marcado al empezar
JRadioButton online = new JRadioButton("Online");
ButtonGroup modalidad = new ButtonGroup();
modalidad.add(presencial);
modalidad.add(online);Para actuar y mostrar progreso#
| Componente | Para qué | Cómo se crea |
|---|---|---|
JButton | Un botón que hace algo al pulsarlo (en el tema de eventos) | new JButton("Guardar") |
JProgressBar | Una barra de progreso | new JProgressBar(0, 100), y barra.setValue(70) |
Métodos que tienen todos#
| Método | Qué hace | Ejemplo |
|---|---|---|
setEnabled(false) | Lo desactiva: se ve en gris y no se puede usar | guardar.setEnabled(false); |
setVisible(false) | Lo esconde | aviso.setVisible(false); |
setToolTipText("…") | Un texto de ayuda al dejar el ratón encima | guardar.setToolTipText("Guarda los cambios"); |
setFont(…) | Cambia la letra | titulo.setFont(titulo.getFont().deriveFont(18f)); |
Errores frecuentes#
| Mensaje o síntoma | Qué significa | Cómo se arregla |
|---|---|---|
incompatible types: Object cannot be converted to String | getSelectedItem() devuelve un Object, aunque la lista tenga textos | Conviértelo: String nivel = (String) lista.getSelectedItem(); |
incompatible types: Object cannot be converted to int | Lo mismo con getValue() del JSpinner | int edad = (int) numero.getValue(); |
incompatible types: char[] cannot be converted to String | getPassword() devuelve las letras sueltas, por seguridad | String clave = new String(campo.getPassword()); |
Se pueden marcar a la vez dos JRadioButton de la misma pregunta | Faltan en un ButtonGroup | Añádelos al mismo grupo |
El JTextArea crece y descoloca la ventana | No está dentro de un JScrollPane | panel.add(new JScrollPane(area)); |