[código] GUIs en Java (Botones de Radio, Menús y Listas)
(anterior) En esta sección se presentan varios de los componentes de Java para la creación de interfaces gráficas de usuario. Los componentes de Swing pueden personalizarse para asemejarse a la apariencia de la plataforma computacional en la que se ejecute el programa, o pueden usar la apariencia visual de Java para brindar una interfaz idéntica en cualquier Sistema Operativo. Esta sección se centra en el uso de botones de radio, menus y listas.
Las clases ButtonGroup y JRadioButton

// Creación de botones de opción, utilizando ButtonGroup y JRadioButton.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PruebaBotonOpcion extends JFrame
{
private JTextField campo;
private Font tipoLetraSimple, tipoLetraNegrita, tipoLetraCursiva, tipoLetraNegritaCursiva;
private JRadioButton botonSimple, botonNegrita, botonCursiva,
botonNegritaCursiva;
private ButtonGroup grupoBotonesOpcion;
// crear GUI y tipos de letra
public PruebaBotonOpcion()
{
super( "Prueba de RadioButton" );
// obtener panel de contenido y establecer su esquema
Container contenedor = getContentPane();
contenedor.setLayout( new FlowLayout() );
// establecer JTextField
campo = new JTextField( "Observe cómo cambia el estilo del tipo de letra", 30 );
contenedor.add( campo );
// crear botones de opción
botonSimple = new JRadioButton( "Simple", true );
contenedor.add( botonSimple );
botonNegrita = new JRadioButton( "Negrita", false );
contenedor.add( botonNegrita );
botonCursiva = new JRadioButton( "Cursiva", false );
contenedor.add( botonCursiva );
botonNegritaCursiva = new JRadioButton( "Negrita/Cursiva", false );
contenedor.add( botonNegritaCursiva );
// crear relación lógica entre objetos JRadioButton
grupoBotonesOpcion = new ButtonGroup();
grupoBotonesOpcion.add( botonSimple );
grupoBotonesOpcion.add( botonNegrita );
grupoBotonesOpcion.add( botonCursiva );
grupoBotonesOpcion.add( botonNegritaCursiva );
// crear objetos de tipo de letra
tipoLetraSimple = new Font( "Serif", Font.PLAIN, 14 );
tipoLetraNegrita = new Font( "Serif", Font.BOLD, 14 );
tipoLetraCursiva = new Font( "Serif", Font.ITALIC, 14 );
tipoLetraNegritaCursiva = new Font( "Serif", Font.BOLD + Font.ITALIC, 14 );
campo.setFont( tipoLetraSimple ); // establecer tipo de letra inicial
// registrar eventos para objetos JRadioButton
botonSimple.addItemListener( new ManejadorBotonOpcion( tipoLetraSimple ) );
botonNegrita.addItemListener( new ManejadorBotonOpcion( tipoLetraNegrita ) );
botonCursiva.addItemListener( new ManejadorBotonOpcion( tipoLetraCursiva ) );
botonNegritaCursiva.addItemListener( new ManejadorBotonOpcion( tipoLetraNegritaCursiva ) );
setSize( 350, 100 );
setVisible( true );
} // fin del constructor de PruebaBotonOpcion
public static void main( String args[] )
{
JFrame.setDefaultLookAndFeelDecorated(true);
PruebaBotonOpcion aplicacion = new PruebaBotonOpcion();
aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
// clase interna privada para manejar eventos de botón de opción
private class ManejadorBotonOpcion implements ItemListener {
private Font tipoDeLetra;
public ManejadorBotonOpcion( Font f )
{
tipoDeLetra = f;
}
// manejar eventos de botón de opción
public void itemStateChanged( ItemEvent evento )
{
campo.setFont( tipoDeLetra );
}
} // fin de la clase interna privada ManejadorBotonOpcion
} // fin de la clase PruebaBotonOpcion
Uso de un objeto JComboBox para seleccionar una imagen a mostrar

// Uso de un objeto JComboBox para seleccionar una imagen a mostrar.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PruebaCuadroComb extends JFrame
{
private JComboBox cuadroCombImagenes;
private JLabel etiqueta;
private String nombres[]={ "quake1.png", "quake2.png", "counterstrike.png", "counterstrike2.png" };
private Icon iconos[] = { new ImageIcon( nombres[ 0 ] ),
new ImageIcon( nombres[ 1 ] ), new ImageIcon( nombres[ 2 ] ),
new ImageIcon( nombres[ 3 ] ) };
// configurar GUI
public PruebaCuadroComb()
{
super( "Prueba de JComboBox" );
// obtener panel de contenido y establecer su esquema
Container contenedor = getContentPane();
contenedor.setLayout( new FlowLayout() );
// establecer objeto JComboBox y registrar su manejador de eventos
cuadroCombImagenes = new JComboBox( nombres );
cuadroCombImagenes.setMaximumRowCount( 3 );
cuadroCombImagenes.addItemListener(
new ItemListener() { // clase interna anónima
// manejar evento para JComboBox
public void itemStateChanged( ItemEvent evento )
{
// determinar si la casilla de verificación está seleccionada
if ( evento.getStateChange() == ItemEvent.SELECTED )
etiqueta.setIcon( iconos[
cuadroCombImagenes.getSelectedIndex() ] );
}
} // fin de la clase interna anónima
); // fin de la llamada a addItemListener
contenedor.add( cuadroCombImagenes );
// establecer objeto JLabel para mostrar objetos ImageIcon
etiqueta = new JLabel( iconos[ 1 ] );
contenedor.add( etiqueta );
setSize( 350, 150 );
setVisible( true );
} // fin del constructor de PruebaCuadroComb
public static void main( String args[] )
{
JFrame.setDefaultLookAndFeelDecorated(true);
PruebaCuadroComb aplicacion = new PruebaCuadroComb();
aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
} // fin de la clase PruebaCuadroComb
Selección de colores con un objeto JList

// Selección de colores de un objeto JList.
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class PruebaLista extends JFrame {
private JList listaColores;
private Container contenedor;
private final String nombresColores[] = { "Negro", "Azul", "Cyan",
"Gris oscuro", "Gris", "Verde", "Gris claro", "Magenta",
"Naranja", "Rosa", "Rojo", "Blanco", "Amarillo" };
private final Color colores[] = { Color.BLACK, Color.BLUE, Color.CYAN,
Color.DARK_GRAY, Color.GRAY, Color.GREEN, Color.LIGHT_GRAY,
Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.WHITE,
Color.YELLOW };
// configurar GUI
public PruebaLista()
{
super( "Prueba de JList" );
// obtener panel de contenido y establecer su esquema
contenedor = getContentPane();
contenedor.setLayout( new FlowLayout() );
// crear una lista con elementos del arreglo nombresColores
listaColores = new JList( nombresColores );
listaColores.setVisibleRowCount( 5 );
// no permitir selecciones múltiples
listaColores.setSelectionMode( ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
// agregar un objeto JScrollPane, que contiene a JList, al panel de contenido
contenedor.add( new JScrollPane( listaColores ) );
listaColores.addListSelectionListener(
new ListSelectionListener() { // clase interna anónima
// manejar eventos de selección en la lista
public void valueChanged( ListSelectionEvent evento )
{
contenedor.setBackground(
colores[ listaColores.getSelectedIndex() ] );
}
} // fin de la clase interna anónima
); // fin de la llamada a addListSelectionListener
setSize( 350, 150 );
setVisible( true );
} // fin del constructor de PruebaLista
public static void main( String args[] )
{
JFrame.setDefaultLookAndFeelDecorated(true);
PruebaLista aplicacion = new PruebaLista();
aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
} // fin de la clase PruebaLista
Como copiar elementos de una lista (JList) a otra

// Cómo copiar elementos de una lista a otra.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PruebaSeleccionMultiple extends JFrame
{
private JList listaColores, listaCopia;
private JButton botonCopiar;
private final String nombresColores[] = { "Negro", "Azul", "Cyan",
"Gris oscuro", "Gris", "Verde", "Gris claro", "Magenta", "Naranja",
"Rosa", "Rojo", "Blanco", "Amarillo" };
// configurar GUI
public PruebaSeleccionMultiple()
{
super( "Listas de selección múltiple" );
// obtener panel de contenido y establecer su esquema
Container contenedor = getContentPane();
contenedor.setLayout( new FlowLayout() );
// establecer objeto JList listaColores
listaColores = new JList( nombresColores );
listaColores.setVisibleRowCount( 5 );
listaColores.setSelectionMode(
ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );
contenedor.add( new JScrollPane( listaColores ) );
// crear botón copiar y registrar su componente de escucha
botonCopiar = new JButton( "Copiar >>>" );
botonCopiar.addActionListener(
new ActionListener() { // clase interna anónima
// manejar evento de botón
public void actionPerformed( ActionEvent evento )
{
// colocar valores seleccionados en listaCopia
listaCopia.setListData( listaColores.getSelectedValues() );
}
} // fin de clase interna anónima
); // fin de la llamada a addActionListener
contenedor.add( botonCopiar );
// establecer objeto JList listaCopia
listaCopia = new JList( );
listaCopia.setVisibleRowCount( 5 );
listaCopia.setFixedCellWidth( 100 );
listaCopia.setFixedCellHeight( 15 );
listaCopia.setSelectionMode(
ListSelectionModel.SINGLE_INTERVAL_SELECTION );
contenedor.add( new JScrollPane( listaCopia ) );
setSize( 325, 130 );
setVisible( true );
} // fin del constructor PruebaSeleccionMultiple
public static void main( String args[] )
{
JFrame.setDefaultLookAndFeelDecorated(true);
PruebaSeleccionMultiple aplicacion = new PruebaSeleccionMultiple();
aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
} // fin de la clase PruebaSeleccionMultiple
Los ejercicios utilizados en este post están basados en ejemplos del libro Cómo programar en Java de Deitel, y por lo tanto están bajo la licencia que esta editorial disponga.
14 Comentarios | deja el tuyo



Excelente tutorial, muchas gracias. La informacion me fue de mucha utilidad. Gracias en serio, ojala y existieran mas blogs como este (=P
Perdón por comentar en un post tan antiguo.
Pero, ¿podrias decirme si es posible añadir iconos a los ítems de una JList?
Gracias
@Lopes: los constructores normales de JList no permite hacerlo. Por lo que si quieres implementarlo tendrás que crearte tu propio JList.
Un saludo!
Hola me gustaria que me saver como puedo crear un reproductor de sonido mas o menos como winamp esto pero en java asi q me gustaria saver como tengo q hacer para reconocer sonidos en java por favor cualquier colaboracion ami correo gracias. pirata3000
por favot no podria mader me totos los eventos ha mi correo que es vegtemmblerr@hotmail.com
estudio quiciera saber mas de esto que es perdon que no ponga algo , voyarevisar esto mi casa con con cuidado.
gracias y gracias por tu hayuda me hace falta proque me ronpe la cabeza y vuelvo ha roper otra otra y orta mas
magnifica pagima d egran ayuda para ejemplos practicos
hola amigos kiero ejemplos delcomando Choice
hola a
hola a todos estoy
hola muchachos estoy empezando en el mindo de la programacion y trabajo con java y sus ejemplos son muy buenisimos
pero en estos momentos estamos trabajando con un entorno de desarrollo que es netbeans y me pregunto si no tienen ejemplos de java en netbenans seria muy bueno que publicaran esos proyectos.
muchas gracias
Hola Jhon,
Desafortunadamente, así como tu usas NetBeans hay otros que usan Eclipse, MonoDevelop, JBlue, JCreator, etc. Así que los ejemplos están solo en código para hacerlos lo más universales posibles.
Si te fijas, a la hora de usar NetBeans, lo único que debes hacer es crear un nuevo proyecto y poner las fuentes en su lugar y ya está.
No se te olvide que NetBeans es solo un IDE, y no quiere decir que sea otro tipo de programación.
Un saludo!
hola una pregunta como podria ponerle letras o un mensaje ahi mismo dond aparece el color y conforme cambie el color vaya saliendo un mensaje
Amigo estan muy buenos tus ejemplos, sin embargo me gustaria que subieras uno donde pudiera usar el objeto que he seleccionado en la JList (si lo puedes enviar, mi correo es miguelarroyo_12@yahoo.com) gracias!!!