SlideShare una empresa de Scribd logo
1 de 51
Descargar para leer sin conexión
Federico Peinado
www.federicopeinado.es
Depto. de Ingeniería del Software e
Inteligencia Artificial
disia.fdi.ucm.es
Facultad de Informática
www.fdi.ucm.es
Universidad Complutense de Madrid
www.ucm.es
 Bibliotecas para programar interfaces gráficas de usuario (GUIs) en Java:
• Abstract Windowing Toolkit (AWT), la primera que ofreció el lenguaje Java
• Swing, muy popular y también integrada en Java
• Standard Widget Toolkit (SWT), creada por IBM y usado en Eclipse
www.eclipse.org/swt
• JavaFX, orientado a la web como Flash o Silverlight
javafx.com/
• XML User Interface Language (XLU)
developer.mozilla.org/En/XUL
• …
 Herramientas WYSIWYG (what you see is what you get) para crear GUIs:
• NetBeans Swing GUI Builder (y ahora también para JavaFX)
http://netbeans.org/
• Eclipse WindowBuilder (para Swing, SWT, RCP, XWT y GWT… ¡muy prometedor!)
www.eclipse.org/windowbuilder/
• JavaServer Faces, orientado a la web
www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.html
• …
2
Laboratorio de Programación de Sistemas – Swing
Abstract Windowing Toolkit (AWT)
 “Look & Feel” dependiente de la plataforma
 La apariencia de ventanas, menús, etc. es distinta en
Windows, Mac, Motif, y otros sistemas
 Funcionalidad independiente de la plataforma
 Básico y experimental
 Único estándar que ofrecía Java hasta la versión 1.1.5
3
Laboratorio de Programación de Sistemas – Swing
Swing ( desde JDK 1.1.5)
 “Look & Feel” y funcionalidad independiente de la
plataforma (“Java Look & Feel”)
 Los menús y controles son como los de las aplicaciones
“nativas“
 A las aplicaciones se les puede dar una apariencia en función
de la plataforma específica
 Nuevas funcionalidades
 API de accesibilidad para personas con necesidades
específicas
4
Laboratorio de Programación de Sistemas – Swing
 Composición de la interfaz gráfica de la
aplicación
• Elección de un contenedor (ventana) en la que se incluyen el resto de
los elementos gráficos de interacción
• Diseño del interfaz gráfico añadiendo componentes gráficos de
interacción (p.e. Botones, etiquetas, menús, ...)
• Establecer la ubicación de los elementos manualmente o mediante un
LayoutManager
 Un Layout Manager gestiona la organización de los componentes gráficos
de la interfaz
 Establecer los gestores de eventos para
responder a las interacciones de los usuarios
con la interfaz gráfica
 Visualizar la interfaz gráfica
5
Laboratorio de Programación de Sistemas – Swing
6
Laboratorio de Programación de Sistemas – Swing
Boton
File Edit Help
Tres elementos esenciales en la interfaz gráfica
Contenendores (containers)
-- agrupan el resto de los elementos gráficos
(e.g. ventana principal de la aplicacion)
Componentes gráficos
-- elementos gráficos de interacción (e.g.,
botones)
Gestores de disposición
(LayoutManagers)
-- algoritmo utilizado para organizar los
elementos gráficos dentro del contenedor
offset
offset
 Contenedores
• Contienen otros componentes (o contenedores)
 Estos componentes se tienen que añadir al contenedor y para
ciertas operaciones se pueden tratar como un todo
 Mediante un gestor de diseño controlan la disposición
(layout) de estos componentes en la pantalla
 Ejemplo: JPanel, JFrame, JApplet
 Lienzo (clase Canvas)
• Superficie simple de dibujo
 Componentes de interfaz de usuario
• botones, listas, menús, casillas de verificación, campos
de texto, etc.
 Componentes de construcción de ventanas
• ventanas, marcos, barras de menús, cuadros de
diálogo
7
Laboratorio de Programación de Sistemas – Swing
8
Laboratorio de Programación de Sistemas – Swing
Jerarquía de clases
Component
TextComponent
TextField TextArea
Container
Window
Frame Dialog
FileDialog
Panel
java.applet.
Applet
Choice
Scrollbar
Checkbox
Button
Label
List
Canvas
ScrollPane
Object
Graphics
9
Laboratorio de Programación de Sistemas – Swing
10
Laboratorio de Programación de Sistemas – Swing
11
Laboratorio de Programación de Sistemas – Swing
import javax.swing.*;
public class GUISimple extends JFrame {
public GUISimple (){
setSize(200, 100);
setVisible(true);
}
public static void main(String args[]) {
GUISimple ventana = new GUISimple();
ventana.setTitle("ventana tipo frame");
}
}
 Contenedores de alto nivel
 Contenedores intermedios
 Componentes atómicos
12
Laboratorio de Programación de Sistemas – Swing
Ventana (JFrame)
Panel de contenido
Panel (JPanel)
Etiqueta (JLabel) Botón Hola (JButton) Botón Adios (JButton)
Panel raíz
Al pulsar los botones, aparece texto en el
cuadro blanco
13
Laboratorio de Programación de Sistemas – Swing
14
Laboratorio de Programación de Sistemas – Swing
Hola (JButon)
Loro (JFrame)
Panel Principal
(JSplitPane)
Botonera (JPanel)
Adios (JButon)
Eco (JTextField)
 java.awt.Component
• Esta clase abstracta define la funcionalidad básica de todos los
componentes gráficos en Java
• Proporciona, entre otros, los métodos de registro y eliminación de
oyentes
 java.awt.Container
• Clase abstracta que permite agrupar uno o varios componentes de
forma que se puedan tratar como una unidad.
• Proporciona métodos para añadir y eliminar componentes o para
definir el tipo de presentación que se realiza de los componentes
en la pantalla (mediante layout Managers)
 javax.swing.JComponent
• Es la clase base de casi todos los componentes de interacción que
incorpora Swing excepto los contenedores de alto nivel (p.e.
JFrame).
15
Laboratorio de Programación de Sistemas – Swing
 javax.swing.JFrame
• Habitualmente la clase JFrame se emplea para crear la ventana
principal de una aplicación en Swing
 javax.swing.JDialog
• Genera ventanas secundarias de interacción con el usuario
 Cuadros de diálogo configurables y modificables
• Son modales: el usuario no puede interactuar con otra ventana
hasta que no cierre la actual
16
Laboratorio de Programación de Sistemas – Swing
JDialog
Dialog
JFrame
Frame JWindow
Window
Container
 La clase JFrame proporciona una ventana principal de aplicación
con su funcionalidad normal (p.e. borde, título, menús) y un panel
de contenido.
 Los contenidos se añaden en el panel de contenidos (content pane)
accesible a través del método getContentPane (por defecto, un objeto
de tipo JPane, aunque puede cambiarse con setContentPane).
 La barra de menú puede fijarse con setJMenuBar.
17
Laboratorio de Programación de Sistemas – Swing
 La clase JDialog es la clase raíz de las
ventanas secundarias que implementan
cuadros de diálogo en Swing.
• dependen de una ventana principal (normalmente
JFrame) y si la ventana principal se cierra, se
maximiza o minimiza las ventanas secundarias
realizan la misma operación de forma automática.
 Las ventanas modales bloquean la interacción
del usuario con otras ventanas.
• Se utilizan sólo cuando hay que garantizar que el
usuario recibe un mensaje o proporciona una
información que es necesaria
18
Laboratorio de Programación de Sistemas – Swing
Tipos de cuadros de dialogo más
habituales
 Message para informar al usuario sobre algún hecho
relevante
 Confirm para realizar una pregunta al usuario con las
posibilidades básicas de respuesta de si, no o cancelar.
 Input para solicitar una entrada del usuario
 Option permite crear una ventana personalizada de
cualquiera de los tipos anteriores
Todos los cuadros de diálogo que
implementa JOptionPane son modales
19
Laboratorio de Programación de Sistemas – Swing
20
Laboratorio de Programación de Sistemas – Swing
JOptionPane.showMessageDialog(this, // La ventana
padre.
"Error deconocido!: Lo llevas muy mal!", //El
mensaje.
"Error", // El título de la ventana de diálogo.
JOptionPane.ERROR_MESSAGE // El tipo de mensaje
);
JOptionPane.showMessageDialog(this,
"Te informo de que lo llevas fatal", "Info",
JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(this,
"Te aviso de que lo llevas fatal", "Aviso",
JOptionPane.WARNING_MESSAGE);
JOptionPane.showMessageDialog(this,
Este mensaje es para tí, majete!", "Mensaje",
JOptionPane.PLAIN_MESSAGE);
21
Laboratorio de Programación de Sistemas – Swing
int seleccionada =
JOptionPane.showConfirmDialog(this,
"Lo aceptas?", "Aviso",
JOptionPane.YES_NO_OPTION, // Configuración del mensaje
JOptionPane.INFORMATION_MESSAGE);
switch(seleccionada) {
case JOptionPane.YES_OPTION: ... // tratar SI
case JOptionPane.NO_OPTION: .. // tratar NO
case JOptionPane.CLOSED_OPTION: .. // tratar ventana cerrada
}
int seleccionada =
JOptionPane.showConfirmDialog(this,
"Lo aceptas?","Aviso",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.WARNING_MESSAGE);
... // los posibles valores devueltos son los anteriores y
... // JOptionPane.CANCEL_OPTION
String nombre = JOptionPane.showInputDialog(this,
"Cómo te llamas, majete?",
"Petición", JOptionPane.QUESTION_MESSAGE
);
// ... procesar entrada
22
Laboratorio de Programación de Sistemas – Swing
// cuadro de opción personalizado
Object[] textoOpciones = {"Si adelante", "Ahora no",
"No se que hacer"};
int opcion = JOptionPane.showOptionDialog(ventana,
"¿ Desea realizar la operación ahora ?",
"Mensaje de confirmación",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, //utilizar el icono predeterminado
textoOpciones,
textoOpciones[0]); //botón predeterminado
}
23
Laboratorio de Programación de Sistemas – Swing
if (JOptionPane.showConfirmDialog(this, panel
,"Introduzca datos"
,JOptionPane.OK_CANCEL_OPTION
,JOptionPane.PLAIN_MESSAGE)
== JOptionPane.OK_OPTION) {
String nombre = campoNombre.getText();
String apellidos = campoApellidos.getText();
int numPer=Integer.parseInt(campoNP.getText());
}
24
Laboratorio de Programación de Sistemas – Swing
import javax.swing.*;
// se crea el selector de ficheros
JFileChooser selector = new JFileChooser();
// solo posibilidad de seleccionar directorios
selector.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
// se muestra; se comprueba si el usuario acepta o cancela
int opcion = selector.showOpenDialog(null);
if (opcion == JFileChooser.APPROVE_OPTION) {
//obtenemos el fichero o directorio seleccionado
File archivo = selector.getSelectedFile();
System.out.println("archivo seleccionado: " + archivo);
}
else
System.out.println("operacion cancelada ");
JPanel
• Agrupa a otros componentes
• No tiene presentación gráfica pero se le pueden
añadir bordes o cambiar el color de fondo
JScrollPane
• Incluye barras de desplazamiento
25
Laboratorio de Programación de Sistemas – Swing
JPanel JScrollPane JSplitPane JTabbedPane JBoxTool
JComponent
26
Laboratorio de Programación de Sistemas – Swing
JPanel panel = new JPanel(new GridLayout(4,2));
JLabel etiquetaNombre = new JLabel("Nombre: ", JLabel.RIGHT);
JTextField campoNombre = new JTextField();
panel.add(etiquetaNombre);
panel.add(campoNombre);
JLabel etiquetaApellidos = new JLabel("Apellidos: ", JLabel.RIGHT);
JTextField campoApellidos = new JTextField();
panel.add(etiquetaApellidos);
panel.add(campoApellidos);
JLabel etiquetaNP = new JLabel("Número Personal: ", JLabel.RIGHT);
JTextField campoNP = new JTextField();
panel.add(etiquetaNP);
panel.add(campoNP);
ButtonGroup grupoBotones = new ButtonGroup();
JRadioButton mañana = new JRadioButton("Grupo Mañana", true);
JRadioButton tarde = new JRadioButton("Grupo Tarde");
grupoBotones.add(maÒana);
grupoBotones.add(tarde);
panel.add(maÒana);
panel.add(tarde);
Panel que agrupa,
tres etiquetas, tres
campos de texto y dos
botones de radio
 Es un contenedor que gestiona dos componentes
(normalmente paneles) colocados vertical u
horizontalmente y diferenciados por un separador que
puede ser reposicionado por el usuario.
 Hay que hacer una asignación inicial del espacio
dedicado a cada parte
27
Laboratorio de Programación de Sistemas – Swing
 El panel con solapas un contenedor que gestiona varios componentes
(o grupos de componentes aunque habitualmente son paneles) como
una pila de fichas
• Sólo uno de los componentes es visible en cada momento
• El usuario puede decidir cual de los componentes se visualiza
seleccionando la solapa o lengüeta correspondiente a dicho
componente.
28
Laboratorio de Programación de Sistemas – Swing
 Implementa una barra de herramientas, formada normalmente por botones
o controles que incluyen iconos, y que aparecen organizados como una fila o
una columna dependiendo de la zona de la pantalla donde se coloque
• Una barra de herramientas que puede cambiarse de situación por los
diferentes bordes de su contenedor, e, incluso, llevarse fuera (este
comportamiento puede variarse: método setFloatable).
• Las herramientas suelen ser (aunque no necesariamente) botones.
• Útil para proporcionar controles que dan acceso rápido a acciones,
normalmente disponibles a través de menú.
• Mediante el método addSeparator es posible añadir separadores.
• JToolBar es, en realidad, una especialización de Box.
29
Laboratorio de Programación de Sistemas – Swing
Iconos
• Elementos gráficos que se pueden añadir a los
componentes
Etiquetas
• Elementos para mostrar información
• Una etiqueta puede incluir un icono
• El texto puede estar escrito con formato HTML En
este caso el texto debe empezar por “<html>”
• Es posible cambiar dinámicamente el texto de la
etiqueta con setText
30
Laboratorio de Programación de Sistemas – Swing
 Los botones, junto con los menús, son los controles más típicos
 Existen diferentes tipos (todos ellos especializan a AbstractButton)
• JButton: Botón aislado. Puede pulsarse, pero su estado no cambia
• JToggleButton : Botón seleccionable. Cuando se pulsa el botón, su estado pasa a
seleccionado, hasta que se pulsa de nuevo (entonces se deselecciona). isSelected
permite chequear su estado
• JCheckBox : Especialización de JToggleButton que implementa una casilla de
verificación. Botón con estado interno, que cambia de apariencia de forma
adecuada según si está o no está seleccionado
• JRadioButton: Especialización de JToggleButton que tiene sentido dentro de un
mismo grupo de botones (ButtonGroup) que controla que solamente uno de ellos
está seleccionado (importante: ButtonGroup es únicamente un controlador, no un
componente)
31
Laboratorio de Programación de Sistemas – Swing
32
Laboratorio de Programación de Sistemas – Swing
JMenuBar JPopupMenu
JMenu JRadioButtonMenuItem JCheckboxMenuItem
JAbstractButton JSeparator
JComponent
JButton
JRadioButton JCheckBox
JToggleButton JMenuItem
AbstractButton
JComponent
 La creación de una barra de menús básica supone:
• Crear un objeto de tipo JMenuBar
• Para cada entrada, crear un objeto de tipo JMenu
• Incluir objetos de tipo JMenuItem en el menú. Esto puede incluir
menús anidados
• Asociar a los items acciones apropiadas (notifican eventos
semánticos de tipo ActionEvent, ya que, en realidad, especializan
a AbstractButton)
 Con setJMenuBar es posible añadir una barra de menús a una
ventana (JFrame)
 En una GUI, muchas veces existen controles ligados a la misma
acción (eg. un botón que hace lo mismo que un item de un menú).
En este caso ambos controles pueden compartir el mismo oyente (y
es aconsejable hacerlo así)
 El diseño de una barra de menús debe ser consistente (poner
opciones semánticamente relacionadas juntas). También pueden
usarse separadores
33
Laboratorio de Programación de Sistemas – Swing
34
Laboratorio de Programación de Sistemas – Swing
import javax.swing.*;
JMenuBar barraMenu = new JMenuBar();
JMenu menuOpciones = new JMenu("Menú de opciones");
JMenuItem listar = new JMenuItem("Listar todos los alumnos");
menuOpciones.add(listar);
// separador
menuOpciones.add(new JSeparator());
JMenuItem listarTarde = new JMenuItem("Ver alumnos de la tarde");
menuOpciones.add(listarTarde);
JMenuItem listarMañana = new JMenuItem("Ver alumnos de la
mañana");
menuOpciones.add(listarMañana);
menuOpciones.add(new JSeparator());
JCheckBoxMenuItem verNumero =
new JCheckBoxMenuItem("Mostrar Número");
menuOpciones.add(verNumero);
barraMenu.add(menuOpciones);
// establecer como barra de menús
// en contenedor de alto nivel
setJMenuBar(barraMenu);
35
Laboratorio de Programación de Sistemas – Swing
JPasswordField
JTextField JTextArea
JTextPane
JEditorPane
JTextComponent
JComponent
 Permite incluir un control para introducir una
línea de texto
 JPasswordField es análogo a JTextField, salvo
que no se visualiza lo que se escribe
 Con setEditable es posible establecer si puede
escribirse o no en el campo de texto
 Notifica un ActionEvent cuando el usuario
indica que la línea de texto está completa
(normalmente pulsando retorno de carro)
 Mediante el método getText es posible
consultar el texto escrito (con setText puede
fijarse desde el programa dicho texto)
36
Laboratorio de Programación de Sistemas – Swing
 Una forma simple de editar/visualizar varias líneas de texto
 Con append es posible añadir texto. También existe getText y setText
(JTextField y JTextArea heredan ambos de JTextComponent)
37
Laboratorio de Programación de Sistemas – Swing
public class PanelTexto extends JPanel {
final String FIN = "n";
public PanelTexto(){
setLayout(new BorderLayout());
JTextField campoTexto = new JTextField("Campo Texto");
add(campoTexto, BorderLayout.NORTH);
String texto = FIN+"Area texto"+FIN+"varias líneas";
JTextArea areaTexto = new JTextArea(texto);
add(areaTexto, BorderLayout.CENTER);
}
}
 La clase JList implementa una lista de
elementos que se presenta en forma de
columna
 En esta lista el usuario puede realizar la
selección de uno (comportamiento por
defecto) o varios de sus elementos
 El contenido de una lista viene dado por su
modelo de datos que debe implementar la
interfaz Java ListModel
• DefaultListModel clase que da una implementación
por defecto del modelo de datos de lista
38
Laboratorio de Programación de Sistemas – Swing
39
Laboratorio de Programación de Sistemas – Swing
DefaultListModel modeloDatos = new DefaultListModel();
for (int ind=0; ind<10; ind++)
modeloDatos.addElement("elemento "+ ind);
JList lista = new JList(modeloDatos);
// se añade un nuevo elementos al modelo
modeloDatos.addElement("Elemento añadido");
lista.setSelectionMode(
ListSelectionModel.SINGLE_INTERVAL_SELECTION);
JScrollPane panelDesplazamiento = new JScrollPane(lista);
 Esta clase implementa un cuadro combinado desplegable, en el que
se agrupan las funcionalidades de una lista y un campo de texto
40
Laboratorio de Programación de Sistemas – Swing
public class PanelComboBox extends JPanel {
String[] listaElementos = new String[15];
public PanelComboBox(){
for (int ind=0; ind<listaElementos.length; ind++)
listaElementos[ind]= new String("elemento "+ ind);
JComboBox combo1 = new JComboBox(listaElementos);
JComboBox combo2 = new JComboBox(listaElementos);
// el segundo se hace editable
combo2.setEditable(true);
combo2.setSelectedItem("OTRO");
// sólo se visualizan 5 filas
combo2.setMaximumRowCount(5);
add(combo1);
add(combo2);
}
}
 Layout Manager
 Cómo se colocan los componentes (usando el método
add) depende de la composición (layout)
 Tipos de diseños o composiciones
• FlowLayout
 Los componentes se ponen de izquierda a derecha hasta llenar la línea,
y se pasa a la siguiente. Cada línea se centra
 Por defecto, en paneles y applets
• BorderLayout
 Se ponen los componentes en un lateral o en el centro
 se indica con una dirección:“East”, “West”, “North”, “South”, “Center”
 Por defecto, en marcos
• GridLayout
 Se colocan los componentes en una rejilla rectangular (filas x cols)
 Se añaden en orden izquierda-derecha y arriba-abajo
 Para poner un layout se utiliza el método setLayout():
GridLayout nuevolayout = new GridLayout(3,2);
setLayout(nuevolayout);
41
Laboratorio de Programación de Sistemas – Swing
42
Laboratorio de Programación de Sistemas – Swing
contenedor
componente1 componente2 componente3
componente6
componente4 componente5
FlowLayout
contenedor
componente1 componente2
componente3
componente6
componente4
componente5
GridLayout(3,2)
 GridBagLayout
• Similar al GridLayout pero mas versátil
• Presenta los componentes en una rejilla, pero:
 Un componente puede ocupar más de una fila y más de una columna
 Las filas y las columnas pueden tener tamaños diferentes
 No se tiene que rellenar en un orden predeterminado
• Utiliza GridBagConstraints para especificar como deben
colocarse, distribuirse, alinearse, etc., los componentes
43
Laboratorio de Programación de Sistemas – Swing
44
Laboratorio de Programación de Sistemas – Swing
 BoxLayout
• Organiza los componentes en una única fila o columna
 Por defecto el espacio libre se deja al final
• Los elementos pueden tener distinto tamaño y
alineación
 Normalmente se utiliza conjuntamente con la
clase Box
• Permite crear componentes invisibles que ocupan un
tamaño fijo para mejorar la presentación (áreas rígidas
y struts)
• Permite crear “gomas extensibles” o componentes
invisibles que también se redimensionan cuando se
redimensiona el contenedor
45
Laboratorio de Programación de Sistemas – Swing
46
Laboratorio de Programación de Sistemas – Swing
public class PruebaBoxLayout extends JFrame {
PruebaBoxLayout(){
JButton b1, b2, b3, b4, b5;
b1 = new JButton("Botón 1");b2 = new JButton("Segundo Botón");
b3 = new JButton("3 Botón");b4 = new JButton("Bot. 4");
b5 = new JButton("Botón5");
JPanel panel = new JPanel();
// se asigna un BoxLayout vertical al panel
panel.setLayout( new BoxLayout(panel, BoxLayout.Y_AXIS));
// se añaden los botones al panel con glue entre ellos
panel.add(b1); panel.add(Box.createGlue());
panel.add(b2); panel.add(Box.createGlue());
panel.add(b3); panel.add(Box.createGlue());
panel.add(b4); panel.add(Box.createGlue());
panel.add(b5);
getContentPane().add(panel);
setTitle("BoxLayout");
pack(); setVisible(true);
}
public static void main(String args[]) {
PruebaBoxLayout ventana = new PruebaBoxLayout();}}
47
Laboratorio de Programación de Sistemas – Swing
La captura de la izquierda es la situación por defecto, en la central
se introduce “pegamento” entre los botones tres y cuatro, y la
captura de la derecha es con “pegamento” entre todos los botones
 Clase abstracta que es la base para los contextos gráficos que
permiten a una aplicación dibujar los componentes
independientemente del dispositivo de salida
 Un contexto gráfico es un objeto que funciona junto con las
ventanas para mostrar los objetos gráficos
 Habitualmente no hay que crear ningún contexto gráfico ya
que esto es parte del framework de AWT y de Swing
 Cada componente tiene un objeto Graphics asociado
 Se obtiene mediante el método getGraphics()
 Se puede dibujar en en dicho objeto Graphics modificando la apariencia del
componente
 Mediante el método paint(Graphics contexto) –AWT- o el
método paintComponent (Graphics contexto) –Swing- se
determina que es lo que se debe mostrar en dicho contexto
48
Laboratorio de Programación de Sistemas – Swing
 Proporciona métodos para dibujar, rellenar,
pintar imágenes, copiar áreas y pegar gráficos
en pantalla
• drawLine
• drawRect y fillRect
• drawPolygon
• drawPolyline
• drawOval y fillOval
• drawArc y fillArc
 y para escribir texto
• drawString
• setFont
49
Laboratorio de Programación de Sistemas – Swing
(0,0) x
y
(0,100)
(100,0)
(width-1,height-1)
50
Laboratorio de Programación de Sistemas – Swing
// canvas que se añade a un frame
public class EjemploCanvas extends Canvas {
String cad = "Escrito en canvas";
// este metodo se ejecuta automaticamente cuando Java necesita mostrar la ventana
public void paint(Graphics g) {
// obtener el color original
Color colorOriginal = g.getColor();
// escribir texto grafico en la ventana y recuadrarlo
g.drawString(cad, 40, 20);
g.drawRect(35, 8, (cad.length()*7), 14);
// dibujo de algunas lineas
for (int i=20; i< 50; i= i+3) {
if ((i % 2) == 0) g.setColor(Color.blue);
else g.setColor(Color.red);
g.drawLine(40, (90-i), 120, 25+i);
}
// dibujo y relleno de un óvalo
g.drawOval(40, 95, 120, 20);
g.fillOval(40, 95, 120, 20);
g.setColor(colorOriginal);}}
Federico Peinado
www.federicopeinado.es

Más contenido relacionado

La actualidad más candente

Guia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeansGuia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeansEmerson Garay
 
Gui interfaz gráfica de usuario javax.swing y java.awt
Gui interfaz gráfica  de usuario javax.swing y java.awtGui interfaz gráfica  de usuario javax.swing y java.awt
Gui interfaz gráfica de usuario javax.swing y java.awtcarlosAhumada_12
 
Concepto de layout
Concepto de layoutConcepto de layout
Concepto de layoutjbersosa
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing Laura
 
Diseño y validacion GUI con java usando Netbeans
Diseño y validacion GUI con java usando NetbeansDiseño y validacion GUI con java usando Netbeans
Diseño y validacion GUI con java usando NetbeansEmerson Garay
 
Contenedores Swing en Netbeans
Contenedores Swing en NetbeansContenedores Swing en Netbeans
Contenedores Swing en NetbeansMarly Encina
 
Guis en java-1pp_2011_
Guis en java-1pp_2011_Guis en java-1pp_2011_
Guis en java-1pp_2011_Ricardo Garcia
 
Gimp Opt 4
Gimp Opt 4Gimp Opt 4
Gimp Opt 4gabyjime
 
Tema 4 3_3_interfaces_de_usuario
Tema 4 3_3_interfaces_de_usuarioTema 4 3_3_interfaces_de_usuario
Tema 4 3_3_interfaces_de_usuarioCarlos A. Iglesias
 
Unidad 2 tópicos avanzados de programacion
Unidad 2 tópicos avanzados de programacionUnidad 2 tópicos avanzados de programacion
Unidad 2 tópicos avanzados de programacionIrving Che
 
manual-de-intouch
manual-de-intouchmanual-de-intouch
manual-de-intouchselcoltga
 
Tema 7 gui, swing y java beans por gio
Tema 7   gui, swing y java beans por gioTema 7   gui, swing y java beans por gio
Tema 7 gui, swing y java beans por gioRobert Wolf
 
Trabajo teórico exposcición
Trabajo teórico exposciciónTrabajo teórico exposcición
Trabajo teórico exposciciónAndy Bsc
 
Curso lab view
Curso lab viewCurso lab view
Curso lab viewalex82co
 

La actualidad más candente (20)

interfaz grafica
interfaz graficainterfaz grafica
interfaz grafica
 
Guia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeansGuia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeans
 
Gui interfaz gráfica de usuario javax.swing y java.awt
Gui interfaz gráfica  de usuario javax.swing y java.awtGui interfaz gráfica  de usuario javax.swing y java.awt
Gui interfaz gráfica de usuario javax.swing y java.awt
 
Tema6resumido
Tema6resumidoTema6resumido
Tema6resumido
 
Concepto de layout
Concepto de layoutConcepto de layout
Concepto de layout
 
Java
JavaJava
Java
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing
 
JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)JAVA Interfaz gráfica (GUI)
JAVA Interfaz gráfica (GUI)
 
Sesion10 Interfaces Graficas Usuarios - java
Sesion10 Interfaces Graficas Usuarios - javaSesion10 Interfaces Graficas Usuarios - java
Sesion10 Interfaces Graficas Usuarios - java
 
Swing1
Swing1Swing1
Swing1
 
Diseño y validacion GUI con java usando Netbeans
Diseño y validacion GUI con java usando NetbeansDiseño y validacion GUI con java usando Netbeans
Diseño y validacion GUI con java usando Netbeans
 
Contenedores Swing en Netbeans
Contenedores Swing en NetbeansContenedores Swing en Netbeans
Contenedores Swing en Netbeans
 
Guis en java-1pp_2011_
Guis en java-1pp_2011_Guis en java-1pp_2011_
Guis en java-1pp_2011_
 
Gimp Opt 4
Gimp Opt 4Gimp Opt 4
Gimp Opt 4
 
Tema 4 3_3_interfaces_de_usuario
Tema 4 3_3_interfaces_de_usuarioTema 4 3_3_interfaces_de_usuario
Tema 4 3_3_interfaces_de_usuario
 
Unidad 2 tópicos avanzados de programacion
Unidad 2 tópicos avanzados de programacionUnidad 2 tópicos avanzados de programacion
Unidad 2 tópicos avanzados de programacion
 
manual-de-intouch
manual-de-intouchmanual-de-intouch
manual-de-intouch
 
Tema 7 gui, swing y java beans por gio
Tema 7   gui, swing y java beans por gioTema 7   gui, swing y java beans por gio
Tema 7 gui, swing y java beans por gio
 
Trabajo teórico exposcición
Trabajo teórico exposciciónTrabajo teórico exposcición
Trabajo teórico exposcición
 
Curso lab view
Curso lab viewCurso lab view
Curso lab view
 

Destacado

Terapia de agua 2011
Terapia de agua 2011Terapia de agua 2011
Terapia de agua 2011lucastea
 
Proyecto redes sociales
Proyecto redes socialesProyecto redes sociales
Proyecto redes socialeswamoco2011
 
Presentación
Presentación Presentación
Presentación gavchomar
 
Resistencia de materiales
Resistencia de materialesResistencia de materiales
Resistencia de materialeskhiny
 
Pubmed trabajo para sistemas
Pubmed trabajo para sistemasPubmed trabajo para sistemas
Pubmed trabajo para sistemasKLrd Ramirez
 
Ruegos pleno enero 2014
Ruegos pleno enero 2014Ruegos pleno enero 2014
Ruegos pleno enero 2014UPyD Parla
 
Cristales solidos
Cristales solidosCristales solidos
Cristales solidosFidel Sosa
 
Hobsbawm ..
Hobsbawm ..Hobsbawm ..
Hobsbawm ..HAV_VI
 
Incorporacion de la nntt
Incorporacion de la nnttIncorporacion de la nntt
Incorporacion de la nnttIgnacio Choez
 
Aznarsemuere
AznarsemuereAznarsemuere
Aznarsemuerejosepbc
 
F08 9543-004 guas de aprendizaje v3 10
F08 9543-004 guas de aprendizaje v3 10F08 9543-004 guas de aprendizaje v3 10
F08 9543-004 guas de aprendizaje v3 10stefannyroomeeroo
 
El sol y la salud
El sol y la saludEl sol y la salud
El sol y la saludabsentismo
 
LINEAMIENTOS PARA LA EDUCACION EN TECNOLOGIA, JORGE ARTURO ACOSTA RIVERA, UPT...
LINEAMIENTOS PARA LA EDUCACION EN TECNOLOGIA, JORGE ARTURO ACOSTA RIVERA, UPT...LINEAMIENTOS PARA LA EDUCACION EN TECNOLOGIA, JORGE ARTURO ACOSTA RIVERA, UPT...
LINEAMIENTOS PARA LA EDUCACION EN TECNOLOGIA, JORGE ARTURO ACOSTA RIVERA, UPT...Arturo Acosta Rivera
 
Sindromes coronarios agudos
Sindromes coronarios agudosSindromes coronarios agudos
Sindromes coronarios agudosMarco Elvir
 
Síndrome de mala absorción
Síndrome de mala absorciónSíndrome de mala absorción
Síndrome de mala absorciónFri cho
 

Destacado (20)

Terapia de agua 2011
Terapia de agua 2011Terapia de agua 2011
Terapia de agua 2011
 
Proyecto redes sociales
Proyecto redes socialesProyecto redes sociales
Proyecto redes sociales
 
Presentación
Presentación Presentación
Presentación
 
Nadia de nada
Nadia de nadaNadia de nada
Nadia de nada
 
Resistencia de materiales
Resistencia de materialesResistencia de materiales
Resistencia de materiales
 
Pubmed trabajo para sistemas
Pubmed trabajo para sistemasPubmed trabajo para sistemas
Pubmed trabajo para sistemas
 
Modelos de gestion
Modelos de gestionModelos de gestion
Modelos de gestion
 
Ruegos pleno enero 2014
Ruegos pleno enero 2014Ruegos pleno enero 2014
Ruegos pleno enero 2014
 
Cristales solidos
Cristales solidosCristales solidos
Cristales solidos
 
Hobsbawm ..
Hobsbawm ..Hobsbawm ..
Hobsbawm ..
 
Fedora
FedoraFedora
Fedora
 
Incorporacion de la nntt
Incorporacion de la nnttIncorporacion de la nntt
Incorporacion de la nntt
 
Preguntas
PreguntasPreguntas
Preguntas
 
Aznarsemuere
AznarsemuereAznarsemuere
Aznarsemuere
 
F08 9543-004 guas de aprendizaje v3 10
F08 9543-004 guas de aprendizaje v3 10F08 9543-004 guas de aprendizaje v3 10
F08 9543-004 guas de aprendizaje v3 10
 
Cursos online que empiezan en abril
Cursos online que empiezan en abrilCursos online que empiezan en abril
Cursos online que empiezan en abril
 
El sol y la salud
El sol y la saludEl sol y la salud
El sol y la salud
 
LINEAMIENTOS PARA LA EDUCACION EN TECNOLOGIA, JORGE ARTURO ACOSTA RIVERA, UPT...
LINEAMIENTOS PARA LA EDUCACION EN TECNOLOGIA, JORGE ARTURO ACOSTA RIVERA, UPT...LINEAMIENTOS PARA LA EDUCACION EN TECNOLOGIA, JORGE ARTURO ACOSTA RIVERA, UPT...
LINEAMIENTOS PARA LA EDUCACION EN TECNOLOGIA, JORGE ARTURO ACOSTA RIVERA, UPT...
 
Sindromes coronarios agudos
Sindromes coronarios agudosSindromes coronarios agudos
Sindromes coronarios agudos
 
Síndrome de mala absorción
Síndrome de mala absorciónSíndrome de mala absorción
Síndrome de mala absorción
 

Similar a Lps 15 gu-iconswing (20)

Jyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fxJyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fx
 
Interfaces Usuario 3
Interfaces Usuario 3Interfaces Usuario 3
Interfaces Usuario 3
 
Java 120706083911-phpapp01
Java 120706083911-phpapp01Java 120706083911-phpapp01
Java 120706083911-phpapp01
 
Interfaces graficas(1)
Interfaces graficas(1)Interfaces graficas(1)
Interfaces graficas(1)
 
Java tema06a
Java tema06aJava tema06a
Java tema06a
 
Programacion en JAVA 2
Programacion en JAVA 2Programacion en JAVA 2
Programacion en JAVA 2
 
Guis_en_java_6pp.pdf
Guis_en_java_6pp.pdfGuis_en_java_6pp.pdf
Guis_en_java_6pp.pdf
 
D0 gui
D0 guiD0 gui
D0 gui
 
C5 applets v2
C5 applets v2C5 applets v2
C5 applets v2
 
Controles de Interfaz Introduccion.pdf
Controles de Interfaz Introduccion.pdfControles de Interfaz Introduccion.pdf
Controles de Interfaz Introduccion.pdf
 
Introduccion de-aplicaciones-visuales
Introduccion de-aplicaciones-visualesIntroduccion de-aplicaciones-visuales
Introduccion de-aplicaciones-visuales
 
Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01
 
Comunicaciones en Java
Comunicaciones en JavaComunicaciones en Java
Comunicaciones en Java
 
Swin01
Swin01Swin01
Swin01
 
diseño de contenedores
diseño de contenedoresdiseño de contenedores
diseño de contenedores
 
Guia4 java
Guia4 javaGuia4 java
Guia4 java
 
C5 applets v2
C5 applets v2C5 applets v2
C5 applets v2
 
Clase
ClaseClase
Clase
 
Programacion_II_Interfaz_grafica_guia_I
Programacion_II_Interfaz_grafica_guia_IProgramacion_II_Interfaz_grafica_guia_I
Programacion_II_Interfaz_grafica_guia_I
 
Controles de Interfaz Parte Practica.pdf
Controles de Interfaz Parte Practica.pdfControles de Interfaz Parte Practica.pdf
Controles de Interfaz Parte Practica.pdf
 

Más de jbersosa

Las excepciones standar
Las excepciones standarLas excepciones standar
Las excepciones standarjbersosa
 
Mas sobre excepciones
Mas sobre excepcionesMas sobre excepciones
Mas sobre excepcionesjbersosa
 
Estructuras de control try catch
Estructuras de control try catchEstructuras de control try catch
Estructuras de control try catchjbersosa
 
Clasen1java
Clasen1javaClasen1java
Clasen1javajbersosa
 
Programación java1
Programación java1Programación java1
Programación java1jbersosa
 
Tercercortesistop
TercercortesistopTercercortesistop
Tercercortesistopjbersosa
 
Encapsulacion
EncapsulacionEncapsulacion
Encapsulacionjbersosa
 
Administracion de la memoria principal
Administracion de  la memoria principalAdministracion de  la memoria principal
Administracion de la memoria principaljbersosa
 
Auditoria 2
Auditoria 2Auditoria 2
Auditoria 2jbersosa
 
Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891jbersosa
 
Auditoria informatica
Auditoria informaticaAuditoria informatica
Auditoria informaticajbersosa
 
Auditoria de sistemas (1)
Auditoria de sistemas (1)Auditoria de sistemas (1)
Auditoria de sistemas (1)jbersosa
 
Auditoría de sistemas de información presentación
Auditoría de sistemas de información presentaciónAuditoría de sistemas de información presentación
Auditoría de sistemas de información presentaciónjbersosa
 
Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...jbersosa
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativosjbersosa
 
Estructura de una red
Estructura de una redEstructura de una red
Estructura de una redjbersosa
 
Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2jbersosa
 
Bases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper reportBases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper reportjbersosa
 

Más de jbersosa (20)

Las excepciones standar
Las excepciones standarLas excepciones standar
Las excepciones standar
 
Mas sobre excepciones
Mas sobre excepcionesMas sobre excepciones
Mas sobre excepciones
 
Estructuras de control try catch
Estructuras de control try catchEstructuras de control try catch
Estructuras de control try catch
 
Main
MainMain
Main
 
Clasen1java
Clasen1javaClasen1java
Clasen1java
 
Programación java1
Programación java1Programación java1
Programación java1
 
Tercercortesistop
TercercortesistopTercercortesistop
Tercercortesistop
 
Encapsulacion
EncapsulacionEncapsulacion
Encapsulacion
 
Administracion de la memoria principal
Administracion de  la memoria principalAdministracion de  la memoria principal
Administracion de la memoria principal
 
Auditoria 2
Auditoria 2Auditoria 2
Auditoria 2
 
Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891
 
Auditoria informatica
Auditoria informaticaAuditoria informatica
Auditoria informatica
 
Auditoria de sistemas (1)
Auditoria de sistemas (1)Auditoria de sistemas (1)
Auditoria de sistemas (1)
 
Auditoría de sistemas de información presentación
Auditoría de sistemas de información presentaciónAuditoría de sistemas de información presentación
Auditoría de sistemas de información presentación
 
Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Php
PhpPhp
Php
 
Estructura de una red
Estructura de una redEstructura de una red
Estructura de una red
 
Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2
 
Bases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper reportBases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper report
 

Último

Manejo de recepción y despacho Repuestos
Manejo de recepción y despacho RepuestosManejo de recepción y despacho Repuestos
Manejo de recepción y despacho Repuestoskgenetsamuel
 
TEMA 2 PRINCIPIOS DEL DERECHO LABORAL EN LA CONSTITUCION POLITICA DEL ESTADO
TEMA 2 PRINCIPIOS DEL DERECHO LABORAL EN LA CONSTITUCION POLITICA DEL ESTADOTEMA 2 PRINCIPIOS DEL DERECHO LABORAL EN LA CONSTITUCION POLITICA DEL ESTADO
TEMA 2 PRINCIPIOS DEL DERECHO LABORAL EN LA CONSTITUCION POLITICA DEL ESTADOGizelSilesRoca
 
TEMA 6 LA II REPÚBLICA (1931-1936).pdf
TEMA 6         LA II REPÚBLICA (1931-1936).pdfTEMA 6         LA II REPÚBLICA (1931-1936).pdf
TEMA 6 LA II REPÚBLICA (1931-1936).pdfrauldol777
 
Mapa-conceptual-de-los-Generos-Literarios.pptx
Mapa-conceptual-de-los-Generos-Literarios.pptxMapa-conceptual-de-los-Generos-Literarios.pptx
Mapa-conceptual-de-los-Generos-Literarios.pptxVernicaDantes
 
Explora el boletín del 8 de mayo de 2024
Explora el boletín del 8 de mayo de 2024Explora el boletín del 8 de mayo de 2024
Explora el boletín del 8 de mayo de 2024Yes Europa
 
Mercado de trabajo y discapacidad. Inclusión laboral.
Mercado de trabajo y discapacidad.  Inclusión laboral.Mercado de trabajo y discapacidad.  Inclusión laboral.
Mercado de trabajo y discapacidad. Inclusión laboral.José María
 
LA DIVISIÓN AZUL.pdfhggggggggggggggggggg
LA DIVISIÓN  AZUL.pdfhgggggggggggggggggggLA DIVISIÓN  AZUL.pdfhggggggggggggggggggg
LA DIVISIÓN AZUL.pdfhgggggggggggggggggggantoniolfdez2006
 
Manual Corporativo Cafe Daelicia en pdf.
Manual Corporativo Cafe Daelicia en pdf.Manual Corporativo Cafe Daelicia en pdf.
Manual Corporativo Cafe Daelicia en pdf.FernandoAlvaroSorian
 
253.CUIDARTE SAN MARTIN PARA UNA MEJOR FORMACION
253.CUIDARTE SAN MARTIN PARA UNA MEJOR FORMACION253.CUIDARTE SAN MARTIN PARA UNA MEJOR FORMACION
253.CUIDARTE SAN MARTIN PARA UNA MEJOR FORMACIONArtemisaReateguiCaro
 
Explora el boletín del 3 de mayo de 2024
Explora el boletín del 3 de mayo de 2024Explora el boletín del 3 de mayo de 2024
Explora el boletín del 3 de mayo de 2024Yes Europa
 

Último (10)

Manejo de recepción y despacho Repuestos
Manejo de recepción y despacho RepuestosManejo de recepción y despacho Repuestos
Manejo de recepción y despacho Repuestos
 
TEMA 2 PRINCIPIOS DEL DERECHO LABORAL EN LA CONSTITUCION POLITICA DEL ESTADO
TEMA 2 PRINCIPIOS DEL DERECHO LABORAL EN LA CONSTITUCION POLITICA DEL ESTADOTEMA 2 PRINCIPIOS DEL DERECHO LABORAL EN LA CONSTITUCION POLITICA DEL ESTADO
TEMA 2 PRINCIPIOS DEL DERECHO LABORAL EN LA CONSTITUCION POLITICA DEL ESTADO
 
TEMA 6 LA II REPÚBLICA (1931-1936).pdf
TEMA 6         LA II REPÚBLICA (1931-1936).pdfTEMA 6         LA II REPÚBLICA (1931-1936).pdf
TEMA 6 LA II REPÚBLICA (1931-1936).pdf
 
Mapa-conceptual-de-los-Generos-Literarios.pptx
Mapa-conceptual-de-los-Generos-Literarios.pptxMapa-conceptual-de-los-Generos-Literarios.pptx
Mapa-conceptual-de-los-Generos-Literarios.pptx
 
Explora el boletín del 8 de mayo de 2024
Explora el boletín del 8 de mayo de 2024Explora el boletín del 8 de mayo de 2024
Explora el boletín del 8 de mayo de 2024
 
Mercado de trabajo y discapacidad. Inclusión laboral.
Mercado de trabajo y discapacidad.  Inclusión laboral.Mercado de trabajo y discapacidad.  Inclusión laboral.
Mercado de trabajo y discapacidad. Inclusión laboral.
 
LA DIVISIÓN AZUL.pdfhggggggggggggggggggg
LA DIVISIÓN  AZUL.pdfhgggggggggggggggggggLA DIVISIÓN  AZUL.pdfhggggggggggggggggggg
LA DIVISIÓN AZUL.pdfhggggggggggggggggggg
 
Manual Corporativo Cafe Daelicia en pdf.
Manual Corporativo Cafe Daelicia en pdf.Manual Corporativo Cafe Daelicia en pdf.
Manual Corporativo Cafe Daelicia en pdf.
 
253.CUIDARTE SAN MARTIN PARA UNA MEJOR FORMACION
253.CUIDARTE SAN MARTIN PARA UNA MEJOR FORMACION253.CUIDARTE SAN MARTIN PARA UNA MEJOR FORMACION
253.CUIDARTE SAN MARTIN PARA UNA MEJOR FORMACION
 
Explora el boletín del 3 de mayo de 2024
Explora el boletín del 3 de mayo de 2024Explora el boletín del 3 de mayo de 2024
Explora el boletín del 3 de mayo de 2024
 

Lps 15 gu-iconswing

  • 1. Federico Peinado www.federicopeinado.es Depto. de Ingeniería del Software e Inteligencia Artificial disia.fdi.ucm.es Facultad de Informática www.fdi.ucm.es Universidad Complutense de Madrid www.ucm.es
  • 2.  Bibliotecas para programar interfaces gráficas de usuario (GUIs) en Java: • Abstract Windowing Toolkit (AWT), la primera que ofreció el lenguaje Java • Swing, muy popular y también integrada en Java • Standard Widget Toolkit (SWT), creada por IBM y usado en Eclipse www.eclipse.org/swt • JavaFX, orientado a la web como Flash o Silverlight javafx.com/ • XML User Interface Language (XLU) developer.mozilla.org/En/XUL • …  Herramientas WYSIWYG (what you see is what you get) para crear GUIs: • NetBeans Swing GUI Builder (y ahora también para JavaFX) http://netbeans.org/ • Eclipse WindowBuilder (para Swing, SWT, RCP, XWT y GWT… ¡muy prometedor!) www.eclipse.org/windowbuilder/ • JavaServer Faces, orientado a la web www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.html • … 2 Laboratorio de Programación de Sistemas – Swing
  • 3. Abstract Windowing Toolkit (AWT)  “Look & Feel” dependiente de la plataforma  La apariencia de ventanas, menús, etc. es distinta en Windows, Mac, Motif, y otros sistemas  Funcionalidad independiente de la plataforma  Básico y experimental  Único estándar que ofrecía Java hasta la versión 1.1.5 3 Laboratorio de Programación de Sistemas – Swing
  • 4. Swing ( desde JDK 1.1.5)  “Look & Feel” y funcionalidad independiente de la plataforma (“Java Look & Feel”)  Los menús y controles son como los de las aplicaciones “nativas“  A las aplicaciones se les puede dar una apariencia en función de la plataforma específica  Nuevas funcionalidades  API de accesibilidad para personas con necesidades específicas 4 Laboratorio de Programación de Sistemas – Swing
  • 5.  Composición de la interfaz gráfica de la aplicación • Elección de un contenedor (ventana) en la que se incluyen el resto de los elementos gráficos de interacción • Diseño del interfaz gráfico añadiendo componentes gráficos de interacción (p.e. Botones, etiquetas, menús, ...) • Establecer la ubicación de los elementos manualmente o mediante un LayoutManager  Un Layout Manager gestiona la organización de los componentes gráficos de la interfaz  Establecer los gestores de eventos para responder a las interacciones de los usuarios con la interfaz gráfica  Visualizar la interfaz gráfica 5 Laboratorio de Programación de Sistemas – Swing
  • 6. 6 Laboratorio de Programación de Sistemas – Swing Boton File Edit Help Tres elementos esenciales en la interfaz gráfica Contenendores (containers) -- agrupan el resto de los elementos gráficos (e.g. ventana principal de la aplicacion) Componentes gráficos -- elementos gráficos de interacción (e.g., botones) Gestores de disposición (LayoutManagers) -- algoritmo utilizado para organizar los elementos gráficos dentro del contenedor offset offset
  • 7.  Contenedores • Contienen otros componentes (o contenedores)  Estos componentes se tienen que añadir al contenedor y para ciertas operaciones se pueden tratar como un todo  Mediante un gestor de diseño controlan la disposición (layout) de estos componentes en la pantalla  Ejemplo: JPanel, JFrame, JApplet  Lienzo (clase Canvas) • Superficie simple de dibujo  Componentes de interfaz de usuario • botones, listas, menús, casillas de verificación, campos de texto, etc.  Componentes de construcción de ventanas • ventanas, marcos, barras de menús, cuadros de diálogo 7 Laboratorio de Programación de Sistemas – Swing
  • 8. 8 Laboratorio de Programación de Sistemas – Swing Jerarquía de clases Component TextComponent TextField TextArea Container Window Frame Dialog FileDialog Panel java.applet. Applet Choice Scrollbar Checkbox Button Label List Canvas ScrollPane Object Graphics
  • 9. 9 Laboratorio de Programación de Sistemas – Swing
  • 10. 10 Laboratorio de Programación de Sistemas – Swing
  • 11. 11 Laboratorio de Programación de Sistemas – Swing import javax.swing.*; public class GUISimple extends JFrame { public GUISimple (){ setSize(200, 100); setVisible(true); } public static void main(String args[]) { GUISimple ventana = new GUISimple(); ventana.setTitle("ventana tipo frame"); } }
  • 12.  Contenedores de alto nivel  Contenedores intermedios  Componentes atómicos 12 Laboratorio de Programación de Sistemas – Swing Ventana (JFrame) Panel de contenido Panel (JPanel) Etiqueta (JLabel) Botón Hola (JButton) Botón Adios (JButton) Panel raíz
  • 13. Al pulsar los botones, aparece texto en el cuadro blanco 13 Laboratorio de Programación de Sistemas – Swing
  • 14. 14 Laboratorio de Programación de Sistemas – Swing Hola (JButon) Loro (JFrame) Panel Principal (JSplitPane) Botonera (JPanel) Adios (JButon) Eco (JTextField)
  • 15.  java.awt.Component • Esta clase abstracta define la funcionalidad básica de todos los componentes gráficos en Java • Proporciona, entre otros, los métodos de registro y eliminación de oyentes  java.awt.Container • Clase abstracta que permite agrupar uno o varios componentes de forma que se puedan tratar como una unidad. • Proporciona métodos para añadir y eliminar componentes o para definir el tipo de presentación que se realiza de los componentes en la pantalla (mediante layout Managers)  javax.swing.JComponent • Es la clase base de casi todos los componentes de interacción que incorpora Swing excepto los contenedores de alto nivel (p.e. JFrame). 15 Laboratorio de Programación de Sistemas – Swing
  • 16.  javax.swing.JFrame • Habitualmente la clase JFrame se emplea para crear la ventana principal de una aplicación en Swing  javax.swing.JDialog • Genera ventanas secundarias de interacción con el usuario  Cuadros de diálogo configurables y modificables • Son modales: el usuario no puede interactuar con otra ventana hasta que no cierre la actual 16 Laboratorio de Programación de Sistemas – Swing JDialog Dialog JFrame Frame JWindow Window Container
  • 17.  La clase JFrame proporciona una ventana principal de aplicación con su funcionalidad normal (p.e. borde, título, menús) y un panel de contenido.  Los contenidos se añaden en el panel de contenidos (content pane) accesible a través del método getContentPane (por defecto, un objeto de tipo JPane, aunque puede cambiarse con setContentPane).  La barra de menú puede fijarse con setJMenuBar. 17 Laboratorio de Programación de Sistemas – Swing
  • 18.  La clase JDialog es la clase raíz de las ventanas secundarias que implementan cuadros de diálogo en Swing. • dependen de una ventana principal (normalmente JFrame) y si la ventana principal se cierra, se maximiza o minimiza las ventanas secundarias realizan la misma operación de forma automática.  Las ventanas modales bloquean la interacción del usuario con otras ventanas. • Se utilizan sólo cuando hay que garantizar que el usuario recibe un mensaje o proporciona una información que es necesaria 18 Laboratorio de Programación de Sistemas – Swing
  • 19. Tipos de cuadros de dialogo más habituales  Message para informar al usuario sobre algún hecho relevante  Confirm para realizar una pregunta al usuario con las posibilidades básicas de respuesta de si, no o cancelar.  Input para solicitar una entrada del usuario  Option permite crear una ventana personalizada de cualquiera de los tipos anteriores Todos los cuadros de diálogo que implementa JOptionPane son modales 19 Laboratorio de Programación de Sistemas – Swing
  • 20. 20 Laboratorio de Programación de Sistemas – Swing JOptionPane.showMessageDialog(this, // La ventana padre. "Error deconocido!: Lo llevas muy mal!", //El mensaje. "Error", // El título de la ventana de diálogo. JOptionPane.ERROR_MESSAGE // El tipo de mensaje ); JOptionPane.showMessageDialog(this, "Te informo de que lo llevas fatal", "Info", JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(this, "Te aviso de que lo llevas fatal", "Aviso", JOptionPane.WARNING_MESSAGE); JOptionPane.showMessageDialog(this, Este mensaje es para tí, majete!", "Mensaje", JOptionPane.PLAIN_MESSAGE);
  • 21. 21 Laboratorio de Programación de Sistemas – Swing int seleccionada = JOptionPane.showConfirmDialog(this, "Lo aceptas?", "Aviso", JOptionPane.YES_NO_OPTION, // Configuración del mensaje JOptionPane.INFORMATION_MESSAGE); switch(seleccionada) { case JOptionPane.YES_OPTION: ... // tratar SI case JOptionPane.NO_OPTION: .. // tratar NO case JOptionPane.CLOSED_OPTION: .. // tratar ventana cerrada } int seleccionada = JOptionPane.showConfirmDialog(this, "Lo aceptas?","Aviso", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); ... // los posibles valores devueltos son los anteriores y ... // JOptionPane.CANCEL_OPTION String nombre = JOptionPane.showInputDialog(this, "Cómo te llamas, majete?", "Petición", JOptionPane.QUESTION_MESSAGE ); // ... procesar entrada
  • 22. 22 Laboratorio de Programación de Sistemas – Swing // cuadro de opción personalizado Object[] textoOpciones = {"Si adelante", "Ahora no", "No se que hacer"}; int opcion = JOptionPane.showOptionDialog(ventana, "¿ Desea realizar la operación ahora ?", "Mensaje de confirmación", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, //utilizar el icono predeterminado textoOpciones, textoOpciones[0]); //botón predeterminado }
  • 23. 23 Laboratorio de Programación de Sistemas – Swing if (JOptionPane.showConfirmDialog(this, panel ,"Introduzca datos" ,JOptionPane.OK_CANCEL_OPTION ,JOptionPane.PLAIN_MESSAGE) == JOptionPane.OK_OPTION) { String nombre = campoNombre.getText(); String apellidos = campoApellidos.getText(); int numPer=Integer.parseInt(campoNP.getText()); }
  • 24. 24 Laboratorio de Programación de Sistemas – Swing import javax.swing.*; // se crea el selector de ficheros JFileChooser selector = new JFileChooser(); // solo posibilidad de seleccionar directorios selector.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); // se muestra; se comprueba si el usuario acepta o cancela int opcion = selector.showOpenDialog(null); if (opcion == JFileChooser.APPROVE_OPTION) { //obtenemos el fichero o directorio seleccionado File archivo = selector.getSelectedFile(); System.out.println("archivo seleccionado: " + archivo); } else System.out.println("operacion cancelada ");
  • 25. JPanel • Agrupa a otros componentes • No tiene presentación gráfica pero se le pueden añadir bordes o cambiar el color de fondo JScrollPane • Incluye barras de desplazamiento 25 Laboratorio de Programación de Sistemas – Swing JPanel JScrollPane JSplitPane JTabbedPane JBoxTool JComponent
  • 26. 26 Laboratorio de Programación de Sistemas – Swing JPanel panel = new JPanel(new GridLayout(4,2)); JLabel etiquetaNombre = new JLabel("Nombre: ", JLabel.RIGHT); JTextField campoNombre = new JTextField(); panel.add(etiquetaNombre); panel.add(campoNombre); JLabel etiquetaApellidos = new JLabel("Apellidos: ", JLabel.RIGHT); JTextField campoApellidos = new JTextField(); panel.add(etiquetaApellidos); panel.add(campoApellidos); JLabel etiquetaNP = new JLabel("Número Personal: ", JLabel.RIGHT); JTextField campoNP = new JTextField(); panel.add(etiquetaNP); panel.add(campoNP); ButtonGroup grupoBotones = new ButtonGroup(); JRadioButton mañana = new JRadioButton("Grupo Mañana", true); JRadioButton tarde = new JRadioButton("Grupo Tarde"); grupoBotones.add(maÒana); grupoBotones.add(tarde); panel.add(maÒana); panel.add(tarde); Panel que agrupa, tres etiquetas, tres campos de texto y dos botones de radio
  • 27.  Es un contenedor que gestiona dos componentes (normalmente paneles) colocados vertical u horizontalmente y diferenciados por un separador que puede ser reposicionado por el usuario.  Hay que hacer una asignación inicial del espacio dedicado a cada parte 27 Laboratorio de Programación de Sistemas – Swing
  • 28.  El panel con solapas un contenedor que gestiona varios componentes (o grupos de componentes aunque habitualmente son paneles) como una pila de fichas • Sólo uno de los componentes es visible en cada momento • El usuario puede decidir cual de los componentes se visualiza seleccionando la solapa o lengüeta correspondiente a dicho componente. 28 Laboratorio de Programación de Sistemas – Swing
  • 29.  Implementa una barra de herramientas, formada normalmente por botones o controles que incluyen iconos, y que aparecen organizados como una fila o una columna dependiendo de la zona de la pantalla donde se coloque • Una barra de herramientas que puede cambiarse de situación por los diferentes bordes de su contenedor, e, incluso, llevarse fuera (este comportamiento puede variarse: método setFloatable). • Las herramientas suelen ser (aunque no necesariamente) botones. • Útil para proporcionar controles que dan acceso rápido a acciones, normalmente disponibles a través de menú. • Mediante el método addSeparator es posible añadir separadores. • JToolBar es, en realidad, una especialización de Box. 29 Laboratorio de Programación de Sistemas – Swing
  • 30. Iconos • Elementos gráficos que se pueden añadir a los componentes Etiquetas • Elementos para mostrar información • Una etiqueta puede incluir un icono • El texto puede estar escrito con formato HTML En este caso el texto debe empezar por “<html>” • Es posible cambiar dinámicamente el texto de la etiqueta con setText 30 Laboratorio de Programación de Sistemas – Swing
  • 31.  Los botones, junto con los menús, son los controles más típicos  Existen diferentes tipos (todos ellos especializan a AbstractButton) • JButton: Botón aislado. Puede pulsarse, pero su estado no cambia • JToggleButton : Botón seleccionable. Cuando se pulsa el botón, su estado pasa a seleccionado, hasta que se pulsa de nuevo (entonces se deselecciona). isSelected permite chequear su estado • JCheckBox : Especialización de JToggleButton que implementa una casilla de verificación. Botón con estado interno, que cambia de apariencia de forma adecuada según si está o no está seleccionado • JRadioButton: Especialización de JToggleButton que tiene sentido dentro de un mismo grupo de botones (ButtonGroup) que controla que solamente uno de ellos está seleccionado (importante: ButtonGroup es únicamente un controlador, no un componente) 31 Laboratorio de Programación de Sistemas – Swing
  • 32. 32 Laboratorio de Programación de Sistemas – Swing JMenuBar JPopupMenu JMenu JRadioButtonMenuItem JCheckboxMenuItem JAbstractButton JSeparator JComponent JButton JRadioButton JCheckBox JToggleButton JMenuItem AbstractButton JComponent
  • 33.  La creación de una barra de menús básica supone: • Crear un objeto de tipo JMenuBar • Para cada entrada, crear un objeto de tipo JMenu • Incluir objetos de tipo JMenuItem en el menú. Esto puede incluir menús anidados • Asociar a los items acciones apropiadas (notifican eventos semánticos de tipo ActionEvent, ya que, en realidad, especializan a AbstractButton)  Con setJMenuBar es posible añadir una barra de menús a una ventana (JFrame)  En una GUI, muchas veces existen controles ligados a la misma acción (eg. un botón que hace lo mismo que un item de un menú). En este caso ambos controles pueden compartir el mismo oyente (y es aconsejable hacerlo así)  El diseño de una barra de menús debe ser consistente (poner opciones semánticamente relacionadas juntas). También pueden usarse separadores 33 Laboratorio de Programación de Sistemas – Swing
  • 34. 34 Laboratorio de Programación de Sistemas – Swing import javax.swing.*; JMenuBar barraMenu = new JMenuBar(); JMenu menuOpciones = new JMenu("Menú de opciones"); JMenuItem listar = new JMenuItem("Listar todos los alumnos"); menuOpciones.add(listar); // separador menuOpciones.add(new JSeparator()); JMenuItem listarTarde = new JMenuItem("Ver alumnos de la tarde"); menuOpciones.add(listarTarde); JMenuItem listarMañana = new JMenuItem("Ver alumnos de la mañana"); menuOpciones.add(listarMañana); menuOpciones.add(new JSeparator()); JCheckBoxMenuItem verNumero = new JCheckBoxMenuItem("Mostrar Número"); menuOpciones.add(verNumero); barraMenu.add(menuOpciones); // establecer como barra de menús // en contenedor de alto nivel setJMenuBar(barraMenu);
  • 35. 35 Laboratorio de Programación de Sistemas – Swing JPasswordField JTextField JTextArea JTextPane JEditorPane JTextComponent JComponent
  • 36.  Permite incluir un control para introducir una línea de texto  JPasswordField es análogo a JTextField, salvo que no se visualiza lo que se escribe  Con setEditable es posible establecer si puede escribirse o no en el campo de texto  Notifica un ActionEvent cuando el usuario indica que la línea de texto está completa (normalmente pulsando retorno de carro)  Mediante el método getText es posible consultar el texto escrito (con setText puede fijarse desde el programa dicho texto) 36 Laboratorio de Programación de Sistemas – Swing
  • 37.  Una forma simple de editar/visualizar varias líneas de texto  Con append es posible añadir texto. También existe getText y setText (JTextField y JTextArea heredan ambos de JTextComponent) 37 Laboratorio de Programación de Sistemas – Swing public class PanelTexto extends JPanel { final String FIN = "n"; public PanelTexto(){ setLayout(new BorderLayout()); JTextField campoTexto = new JTextField("Campo Texto"); add(campoTexto, BorderLayout.NORTH); String texto = FIN+"Area texto"+FIN+"varias líneas"; JTextArea areaTexto = new JTextArea(texto); add(areaTexto, BorderLayout.CENTER); } }
  • 38.  La clase JList implementa una lista de elementos que se presenta en forma de columna  En esta lista el usuario puede realizar la selección de uno (comportamiento por defecto) o varios de sus elementos  El contenido de una lista viene dado por su modelo de datos que debe implementar la interfaz Java ListModel • DefaultListModel clase que da una implementación por defecto del modelo de datos de lista 38 Laboratorio de Programación de Sistemas – Swing
  • 39. 39 Laboratorio de Programación de Sistemas – Swing DefaultListModel modeloDatos = new DefaultListModel(); for (int ind=0; ind<10; ind++) modeloDatos.addElement("elemento "+ ind); JList lista = new JList(modeloDatos); // se añade un nuevo elementos al modelo modeloDatos.addElement("Elemento añadido"); lista.setSelectionMode( ListSelectionModel.SINGLE_INTERVAL_SELECTION); JScrollPane panelDesplazamiento = new JScrollPane(lista);
  • 40.  Esta clase implementa un cuadro combinado desplegable, en el que se agrupan las funcionalidades de una lista y un campo de texto 40 Laboratorio de Programación de Sistemas – Swing public class PanelComboBox extends JPanel { String[] listaElementos = new String[15]; public PanelComboBox(){ for (int ind=0; ind<listaElementos.length; ind++) listaElementos[ind]= new String("elemento "+ ind); JComboBox combo1 = new JComboBox(listaElementos); JComboBox combo2 = new JComboBox(listaElementos); // el segundo se hace editable combo2.setEditable(true); combo2.setSelectedItem("OTRO"); // sólo se visualizan 5 filas combo2.setMaximumRowCount(5); add(combo1); add(combo2); } }
  • 41.  Layout Manager  Cómo se colocan los componentes (usando el método add) depende de la composición (layout)  Tipos de diseños o composiciones • FlowLayout  Los componentes se ponen de izquierda a derecha hasta llenar la línea, y se pasa a la siguiente. Cada línea se centra  Por defecto, en paneles y applets • BorderLayout  Se ponen los componentes en un lateral o en el centro  se indica con una dirección:“East”, “West”, “North”, “South”, “Center”  Por defecto, en marcos • GridLayout  Se colocan los componentes en una rejilla rectangular (filas x cols)  Se añaden en orden izquierda-derecha y arriba-abajo  Para poner un layout se utiliza el método setLayout(): GridLayout nuevolayout = new GridLayout(3,2); setLayout(nuevolayout); 41 Laboratorio de Programación de Sistemas – Swing
  • 42. 42 Laboratorio de Programación de Sistemas – Swing contenedor componente1 componente2 componente3 componente6 componente4 componente5 FlowLayout contenedor componente1 componente2 componente3 componente6 componente4 componente5 GridLayout(3,2)
  • 43.  GridBagLayout • Similar al GridLayout pero mas versátil • Presenta los componentes en una rejilla, pero:  Un componente puede ocupar más de una fila y más de una columna  Las filas y las columnas pueden tener tamaños diferentes  No se tiene que rellenar en un orden predeterminado • Utiliza GridBagConstraints para especificar como deben colocarse, distribuirse, alinearse, etc., los componentes 43 Laboratorio de Programación de Sistemas – Swing
  • 44. 44 Laboratorio de Programación de Sistemas – Swing
  • 45.  BoxLayout • Organiza los componentes en una única fila o columna  Por defecto el espacio libre se deja al final • Los elementos pueden tener distinto tamaño y alineación  Normalmente se utiliza conjuntamente con la clase Box • Permite crear componentes invisibles que ocupan un tamaño fijo para mejorar la presentación (áreas rígidas y struts) • Permite crear “gomas extensibles” o componentes invisibles que también se redimensionan cuando se redimensiona el contenedor 45 Laboratorio de Programación de Sistemas – Swing
  • 46. 46 Laboratorio de Programación de Sistemas – Swing public class PruebaBoxLayout extends JFrame { PruebaBoxLayout(){ JButton b1, b2, b3, b4, b5; b1 = new JButton("Botón 1");b2 = new JButton("Segundo Botón"); b3 = new JButton("3 Botón");b4 = new JButton("Bot. 4"); b5 = new JButton("Botón5"); JPanel panel = new JPanel(); // se asigna un BoxLayout vertical al panel panel.setLayout( new BoxLayout(panel, BoxLayout.Y_AXIS)); // se añaden los botones al panel con glue entre ellos panel.add(b1); panel.add(Box.createGlue()); panel.add(b2); panel.add(Box.createGlue()); panel.add(b3); panel.add(Box.createGlue()); panel.add(b4); panel.add(Box.createGlue()); panel.add(b5); getContentPane().add(panel); setTitle("BoxLayout"); pack(); setVisible(true); } public static void main(String args[]) { PruebaBoxLayout ventana = new PruebaBoxLayout();}}
  • 47. 47 Laboratorio de Programación de Sistemas – Swing La captura de la izquierda es la situación por defecto, en la central se introduce “pegamento” entre los botones tres y cuatro, y la captura de la derecha es con “pegamento” entre todos los botones
  • 48.  Clase abstracta que es la base para los contextos gráficos que permiten a una aplicación dibujar los componentes independientemente del dispositivo de salida  Un contexto gráfico es un objeto que funciona junto con las ventanas para mostrar los objetos gráficos  Habitualmente no hay que crear ningún contexto gráfico ya que esto es parte del framework de AWT y de Swing  Cada componente tiene un objeto Graphics asociado  Se obtiene mediante el método getGraphics()  Se puede dibujar en en dicho objeto Graphics modificando la apariencia del componente  Mediante el método paint(Graphics contexto) –AWT- o el método paintComponent (Graphics contexto) –Swing- se determina que es lo que se debe mostrar en dicho contexto 48 Laboratorio de Programación de Sistemas – Swing
  • 49.  Proporciona métodos para dibujar, rellenar, pintar imágenes, copiar áreas y pegar gráficos en pantalla • drawLine • drawRect y fillRect • drawPolygon • drawPolyline • drawOval y fillOval • drawArc y fillArc  y para escribir texto • drawString • setFont 49 Laboratorio de Programación de Sistemas – Swing (0,0) x y (0,100) (100,0) (width-1,height-1)
  • 50. 50 Laboratorio de Programación de Sistemas – Swing // canvas que se añade a un frame public class EjemploCanvas extends Canvas { String cad = "Escrito en canvas"; // este metodo se ejecuta automaticamente cuando Java necesita mostrar la ventana public void paint(Graphics g) { // obtener el color original Color colorOriginal = g.getColor(); // escribir texto grafico en la ventana y recuadrarlo g.drawString(cad, 40, 20); g.drawRect(35, 8, (cad.length()*7), 14); // dibujo de algunas lineas for (int i=20; i< 50; i= i+3) { if ((i % 2) == 0) g.setColor(Color.blue); else g.setColor(Color.red); g.drawLine(40, (90-i), 120, 25+i); } // dibujo y relleno de un óvalo g.drawOval(40, 95, 120, 20); g.fillOval(40, 95, 120, 20); g.setColor(colorOriginal);}}