Codemaker Interfaces

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

Catálogo de componentes de Swing: JLabel, JTextField, JPasswordField, JTextArea, JButton, JCheckBox, JRadioButton, JComboBox, JSpinner, JSlider y JProgressBar

Para escribir y mostrar texto#

ComponentePara quéCómo se creaCómo se lee lo que tiene
JLabelUn texto que el usuario solo puede leernew JLabel("Nombre:")etiqueta.getText()
JTextFieldUna línea de texto que escribe el usuarionew JTextField(20) (20 = ancho, en letras)campo.getText()
JPasswordFieldComo el anterior, pero con puntos en vez de letrasnew JPasswordField(20)new String(clave.getPassword())
JTextAreaUn texto de varias líneasnew 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#

ComponentePara quéCómo se creaCómo se lee lo elegido
JCheckBoxUna casilla de sí o nonew JCheckBox("Recordarme")casilla.isSelected() → true o false
JRadioButtonElegir una opción entre variasnew JRadioButton("Online")opcion.isSelected()
JComboBoxUna lista desplegablenew JComboBox<>(new String[] {"Junior", "Senior"})(String) lista.getSelectedItem()
JSpinnerUn número, con flechas para subir y bajarnew JSpinner(new SpinnerNumberModel(16, 6, 99, 1)) (valor, mínimo, máximo, paso)(int) numero.getValue()
JSliderUn valor en un rango, con una barra deslizantenew 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#

ComponentePara quéCómo se crea
JButtonUn botón que hace algo al pulsarlo (en el tema de eventos)new JButton("Guardar")
JProgressBarUna barra de progresonew JProgressBar(0, 100), y barra.setValue(70)

Métodos que tienen todos#

MétodoQué haceEjemplo
setEnabled(false)Lo desactiva: se ve en gris y no se puede usarguardar.setEnabled(false);
setVisible(false)Lo escondeaviso.setVisible(false);
setToolTipText("…")Un texto de ayuda al dejar el ratón encimaguardar.setToolTipText("Guarda los cambios");
setFont(…)Cambia la letratitulo.setFont(titulo.getFont().deriveFont(18f));

Errores frecuentes#

Mensaje o síntomaQué significaCómo se arregla
incompatible types: Object cannot be converted to StringgetSelectedItem() devuelve un Object, aunque la lista tenga textosConviértelo: String nivel = (String) lista.getSelectedItem();
incompatible types: Object cannot be converted to intLo mismo con getValue() del JSpinnerint edad = (int) numero.getValue();
incompatible types: char[] cannot be converted to StringgetPassword() devuelve las letras sueltas, por seguridadString clave = new String(campo.getPassword());
Se pueden marcar a la vez dos JRadioButton de la misma preguntaFaltan en un ButtonGroupAñádelos al mismo grupo
El JTextArea crece y descoloca la ventanaNo está dentro de un JScrollPanepanel.add(new JScrollPane(area));