SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
Iván Alonso
e-mail: ivan.alonso.gutierrez@gmail.com
GUIs en Java (4)
AWT - Swing - SWT
Recordatorio de sistemas de interfaces
Sólo funcionalidades comunes a todos los ss.oo.
Los controles tienen funcionamientos similares pero
no idénticos
Utiliza los componentes nativos de cada sistema operativo
AWT (AbstractWindowingToolkit)
Swing
Extensible: proporciona distintos look & feel
Componentes “ligeros” (no reservan recursos nativos)
Programado en Java
Implementado mediante Modelo-Vista-Controlador
SWT (StandardWidgetToolkit)
Extensible, aunque más difícil
Componentes “pesados” (llama a los recursos nativos)
Programado en Java (aunque exige deallocation)
No sigue el Modelo-Vista-Controlador
Su implementación es distinta en cada plataforma
Personalización del Look & Feel
de las aplicaciones
import javax.swing.*;
public class Main {
public static void main(String[] args) {
MySimpleGUI gui = new MySimpleGUI();
}
}
class MySimpleGUI extends JFrame {
public MySimpleGUI() {
setSize(400, 200);
setTitle("Ventana de tipo JFrame");
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Comportamiento por defecto en Swing
Looks & Feels disponibles
CrossPlatformLookAndFeel
Utilizado por defecto
Conocido como “Metal”
SystemLookAndFeel
Nativo del sistema
Synth
Básico para extender mediante archivos XML
Multiplexing
Para mezclar distintos Look & Feel
Sun los proporciona como parte de JRE:
Otros (búsqueda en internet de “Look & FeelThemes”)
Gratuitos, comerciales, etc.
Aspecto de SystemLookAndFeel
Linux, Solaris (con GTK) GTK+
Linux, Solaris (sin GTK) Motif
Windows
Windows,
Windows XP,
WindowsVista
IBM Unix IBM *
HP UX HP *
Macintosh Macintosh *
* Desarrollados por cada fabricante
import javax.swing.*;
public class Main {
public static void main(String[] args) {
String name = UIManager.getCrossPlatformLookAndFeelClassName();
try {
UIManager.setLookAndFeel(name);
}
catch(Exception e) {
return;
}
MySimpleGUI gui = new MySimpleGUI(name);
}
}
class MySimpleGUI extends JFrame {
public MySimpleGUI(String name) {
setSize(400, 200);
setTitle("Ventana " + name);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Definiendo el aspecto a utilizar
Definiendo el aspecto a utilizar (II)
Linux (Ubuntu)
Mac OS X
[...]
String name = UIManager.getSystemLookAndFeelClassName();
try {
UIManager.setLookAndFeel(name);
}
[...]
Utilizando
SystemLookAndFeel
CrossPlatformLookAndFeel
Definiendo el aspecto a utilizar (III)
Linux (Ubuntu)
Mac OS X
Metal
(por defecto)
Metal
System (por defecto)
System
Definiendo el aspecto a utilizar (IV)
Windows 7
Metal
(por defecto)
Es importante notar que no siempre el estilo por defecto será CrossPlatform
(Metal), como hemos visto en Mac OS X, por lo que es recomendable especificar
el look and feel a utilizar
System
Ejercicio 1 - rápido y sencillo :)
- Escoger uno de los últimos ejercicios realizados en
los anteriores temas
- Cambiar su look & feel y probarlo con CrossPlatform y
System
Ejercicio 2 - más largo :(
Realizaremos una primera versión de un “Hundir la
flota” muy simple
Mezclamos varias cosas de
las aprendidas durante todos
los temas de interfaces
Podremos ampliarlo más
adelante cuando estudiemos
los temas de redes
Ejercicio 2 (Pistas)
Una posible solución con tres objetos: el general que inicie los demás, el modelo de
datos del juego, y el interfaz gráfico (creado mediante el diseñador de NetBeans)
El modelo de datos puede ser una matriz
5x5 cuyos valores sean de una
enumeración (agua, barco, barco hundido,
etc)
Todos los botones pueden utilizar el
mismo listener, que obtenga su name del
evento recibido, y desde allí se llame a un
método de modelo de datos que actualice
la matriz
No hay una única solución
válida, hagámoslo entre todos
Ejercicio 2 (Ampliación)
Incluir un nuevo tablero inferior para
nuestra propia zona de juego, con su
propio tablero en el modelo de datos
Permitir hacer click sólo cinco veces, que
serán las localizaciones de nuestros
barcos.Tras inicializar nuestra zona,
deshabilitar todos los botones inferiores y
habilitar e inicializar la zona enemiga para
comenzar el juego
Revisar la inicialización de la zona enemiga,
para asegurarnos de que siempre tengamos
cinco (y sólo cinco) barcos asignados
Drag & Drop entre
componentes
Drag & Drop en Swing
Técnicamente está disponible entre todos los
componentes gráficos de Swing (JComponent)
Aunque algunos, lógicamente, requerirán código por nuestra parte
Funcionan directamente
JEditorPane
JFormattedTextField
JPasswordField
JTextArea
JTextField
JTextPane
JColorChooser
Necesitan ajustes propios
JList
JTable
JTree
Drag & Drop en Swing (II)
Funciones a utilizar (componentes estándar)
setDragEnable(boolean) - Para activar el drag & drop (desactivado por
defecto), disponible en los componentes estándar
setDropMode(DropMode) - Para definir el funcionamiento (sólo) en los
componentes no estándar: JList, JTable y JTree
setTransferHandler(TransferHandler) - Para indicar el objeto encargado
de realizar la transferencia de información (sólo necesitamos cambiarlo si la forma de
cambiar información es distinta a la proporcionada por defecto)
Funciones a utilizar (componentes no estándar)
Y hay que programar el objeto TransferHandler completo
Ejercicio recomendado:
http://java.sun.com/docs/books/tutorial/uiswing/dnd/index.html
Ejercicio simple de Drag & Drop
Crear una aplicación con diversos controles y activar
el Drag & Drop en todos ellos (setDragEnable)
Básicos:
JEditorPane
JFormattedTextField
JPasswordField
JTextArea
JTextField
JTextPane
Ejercicio complejo de Drag & Drop
Implementaremos nuestro propio TransferHandler para
utilizar con JList
La lista debe inicializarse mediante un DefaultListModel:
DefaultListModel model = new DefaultListModel();
for(int i = 0; i < data.length; i++) {
model.addElement(data[i]);
}
list.setModel(model);
TransferHandler
boolean canImport(TransferHandler.TransferSupport info)
Para definir qué tipo de información puede aceptar nuestro componente
Transferable createTransferable(JComponent c)
Para convertir la información de nuestro componente a un objeto transferible a
otros componentes
int getSourceActions(JComponent c)
Qué acciones permite el componente (copiar, mover o ambos)
boolean importData(TransferHandler.TransferSupport info)
Qué hacer tras recibir información (Drop)
void exportDone(JComponent c, Transferable data, int action)
Qué hacer tras enviar la información (Drag)
Nueva clase
public class ListTransferHandler extends TransferHandler
Nuestra lista la utilizará mediante:
list.setTransferHandler(new ListTransferHandler());

Más contenido relacionado

Destacado

3 2 1 componentes y contenedores swing
3 2 1 componentes y contenedores swing3 2 1 componentes y contenedores swing
3 2 1 componentes y contenedores swingUVM
 
Librería swing java
Librería swing javaLibrería swing java
Librería swing javapgpg2006
 
Manual java swing
Manual java swingManual java swing
Manual java swingRobert Wolf
 
Generación de Interfaces a partir de XML
Generación de Interfaces a partir de XMLGeneración de Interfaces a partir de XML
Generación de Interfaces a partir de XMLJose Benítez Andrades
 
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
 
INTRODUCCIÓN A LA GRAFICACIÓN POR COMPUTADORA
INTRODUCCIÓN A LA GRAFICACIÓN POR COMPUTADORAINTRODUCCIÓN A LA GRAFICACIÓN POR COMPUTADORA
INTRODUCCIÓN A LA GRAFICACIÓN POR COMPUTADORArehoscript
 
Programación Orientada a Eventos Java
Programación Orientada a Eventos JavaProgramación Orientada a Eventos Java
Programación Orientada a Eventos JavaJosé Mendoza
 
Confección de interfaces de usuario con JAVA - SWING
Confección de interfaces de usuario con JAVA - SWINGConfección de interfaces de usuario con JAVA - SWING
Confección de interfaces de usuario con JAVA - SWINGJose Benítez Andrades
 

Destacado (16)

5.confección de informes
5.confección de informes5.confección de informes
5.confección de informes
 
4.usabilidad
4.usabilidad4.usabilidad
4.usabilidad
 
3 2 1 componentes y contenedores swing
3 2 1 componentes y contenedores swing3 2 1 componentes y contenedores swing
3 2 1 componentes y contenedores swing
 
Librería swing java
Librería swing javaLibrería swing java
Librería swing java
 
Manual java swing
Manual java swingManual java swing
Manual java swing
 
Menejo de eventos en java introduccion
Menejo de eventos en java introduccionMenejo de eventos en java introduccion
Menejo de eventos en java introduccion
 
Generación de Interfaces a partir de XML
Generación de Interfaces a partir de XMLGeneración de Interfaces a partir de XML
Generación de Interfaces a partir de XML
 
3.creacion de componentes visuales
3.creacion de componentes visuales3.creacion de componentes visuales
3.creacion de componentes visuales
 
7.distribucion de aplicaciones
7.distribucion de aplicaciones7.distribucion de aplicaciones
7.distribucion de aplicaciones
 
6.documentacion de aplicaciones
6.documentacion de aplicaciones6.documentacion de aplicaciones
6.documentacion de aplicaciones
 
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
 
Programación III (Java) - 07 Eventos
Programación III (Java) - 07 EventosProgramación III (Java) - 07 Eventos
Programación III (Java) - 07 Eventos
 
8.realizacion de pruebas
8.realizacion de pruebas8.realizacion de pruebas
8.realizacion de pruebas
 
INTRODUCCIÓN A LA GRAFICACIÓN POR COMPUTADORA
INTRODUCCIÓN A LA GRAFICACIÓN POR COMPUTADORAINTRODUCCIÓN A LA GRAFICACIÓN POR COMPUTADORA
INTRODUCCIÓN A LA GRAFICACIÓN POR COMPUTADORA
 
Programación Orientada a Eventos Java
Programación Orientada a Eventos JavaProgramación Orientada a Eventos Java
Programación Orientada a Eventos Java
 
Confección de interfaces de usuario con JAVA - SWING
Confección de interfaces de usuario con JAVA - SWINGConfección de interfaces de usuario con JAVA - SWING
Confección de interfaces de usuario con JAVA - SWING
 

Similar a Java gui 4

Look and feel java
Look and feel javaLook and feel java
Look and feel javatiburon_u2
 
Interfaz gráfica de usuario y eventos (introducción)
Interfaz gráfica de usuario y eventos (introducción)Interfaz gráfica de usuario y eventos (introducción)
Interfaz gráfica de usuario y eventos (introducción)Omar B.
 
Spring OSGI , dm server - Leonardo Torres Altez
Spring OSGI , dm server - Leonardo Torres AltezSpring OSGI , dm server - Leonardo Torres Altez
Spring OSGI , dm server - Leonardo Torres Alteza19987225
 
Interfaces Usuario 3
Interfaces Usuario 3Interfaces Usuario 3
Interfaces Usuario 3Milaly
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Facescok12v
 
La web como Plataforma con Dojo Toolkit
La web como Plataforma con Dojo ToolkitLa web como Plataforma con Dojo Toolkit
La web como Plataforma con Dojo ToolkitAlex Fuentes
 
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
 
Guis en java-1pp_2011_
Guis en java-1pp_2011_Guis en java-1pp_2011_
Guis en java-1pp_2011_Ricardo Garcia
 
Unity3D-12-Scripts_y_metodos_basicos.pptx
Unity3D-12-Scripts_y_metodos_basicos.pptxUnity3D-12-Scripts_y_metodos_basicos.pptx
Unity3D-12-Scripts_y_metodos_basicos.pptxVictor Marin
 
Guis en java-1pp_2012_
Guis en java-1pp_2012_Guis en java-1pp_2012_
Guis en java-1pp_2012_Robert Wolf
 
Taller subflash 2012
Taller subflash 2012Taller subflash 2012
Taller subflash 2012Raul Jimenez
 
Guis_en_java_6pp.pdf
Guis_en_java_6pp.pdfGuis_en_java_6pp.pdf
Guis_en_java_6pp.pdfAnaLpez275
 
Introduccion a NetLogo
Introduccion a NetLogoIntroduccion a NetLogo
Introduccion a NetLogoDiana
 

Similar a Java gui 4 (20)

Look and feel java
Look and feel javaLook and feel java
Look and feel java
 
Interfaz gráfica de usuario y eventos (introducción)
Interfaz gráfica de usuario y eventos (introducción)Interfaz gráfica de usuario y eventos (introducción)
Interfaz gráfica de usuario y eventos (introducción)
 
Spring OSGI , dm server - Leonardo Torres Altez
Spring OSGI , dm server - Leonardo Torres AltezSpring OSGI , dm server - Leonardo Torres Altez
Spring OSGI , dm server - Leonardo Torres Altez
 
Java 2010: presente, límites y futuro
Java 2010: presente, límites y futuroJava 2010: presente, límites y futuro
Java 2010: presente, límites y futuro
 
Interfaces Usuario 3
Interfaces Usuario 3Interfaces Usuario 3
Interfaces Usuario 3
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
sesion_01-JAVA.pdf
sesion_01-JAVA.pdfsesion_01-JAVA.pdf
sesion_01-JAVA.pdf
 
La web como Plataforma con Dojo Toolkit
La web como Plataforma con Dojo ToolkitLa web como Plataforma con Dojo Toolkit
La web como Plataforma con Dojo Toolkit
 
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
 
Guis en java-1pp_2011_
Guis en java-1pp_2011_Guis en java-1pp_2011_
Guis en java-1pp_2011_
 
Unity3D-12-Scripts_y_metodos_basicos.pptx
Unity3D-12-Scripts_y_metodos_basicos.pptxUnity3D-12-Scripts_y_metodos_basicos.pptx
Unity3D-12-Scripts_y_metodos_basicos.pptx
 
principios básicos
principios básicosprincipios básicos
principios básicos
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Guis en java-1pp_2012_
Guis en java-1pp_2012_Guis en java-1pp_2012_
Guis en java-1pp_2012_
 
Visual basic .NET
Visual basic .NETVisual basic .NET
Visual basic .NET
 
Advanced Action Script 3.0
Advanced Action Script 3.0Advanced Action Script 3.0
Advanced Action Script 3.0
 
Java tema06a
Java tema06aJava tema06a
Java tema06a
 
Taller subflash 2012
Taller subflash 2012Taller subflash 2012
Taller subflash 2012
 
Guis_en_java_6pp.pdf
Guis_en_java_6pp.pdfGuis_en_java_6pp.pdf
Guis_en_java_6pp.pdf
 
Introduccion a NetLogo
Introduccion a NetLogoIntroduccion a NetLogo
Introduccion a NetLogo
 

Más de Robert Wolf

Tema 16 acceso a base de datos usando jpa por gio
Tema 16   acceso a base de datos usando jpa por gioTema 16   acceso a base de datos usando jpa por gio
Tema 16 acceso a base de datos usando jpa por gioRobert Wolf
 
Tema 15 aplicaciones de dos capas por gio
Tema 15   aplicaciones de dos capas por gioTema 15   aplicaciones de dos capas por gio
Tema 15 aplicaciones de dos capas por gioRobert Wolf
 
Tema 14 imágenes en java por gio
Tema 14   imágenes en java por gioTema 14   imágenes en java por gio
Tema 14 imágenes en java por gioRobert Wolf
 
Tema 13 gráficas en java por gio
Tema 13   gráficas en java por gioTema 13   gráficas en java por gio
Tema 13 gráficas en java por gioRobert Wolf
 
Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gioRobert Wolf
 
Tema 11 expresiones regulares en java por gio
Tema 11   expresiones regulares en java por gioTema 11   expresiones regulares en java por gio
Tema 11 expresiones regulares en java por gioRobert Wolf
 
Tema 10 clase abstractas e interfaz
Tema 10 clase abstractas e interfazTema 10 clase abstractas e interfaz
Tema 10 clase abstractas e interfazRobert Wolf
 
Tema 10 entrada y salida por gio
Tema 10   entrada y salida por gioTema 10   entrada y salida por gio
Tema 10 entrada y salida por gioRobert Wolf
 
Tema 9 pruebas unitarias por gio
Tema 9   pruebas unitarias por gioTema 9   pruebas unitarias por gio
Tema 9 pruebas unitarias por gioRobert Wolf
 
Tema 9 aplicaciones de dos capas por gio
Tema 9   aplicaciones de dos capas por gioTema 9   aplicaciones de dos capas por gio
Tema 9 aplicaciones de dos capas por gioRobert Wolf
 
Tema 8 entrada y salida por gio
Tema 8   entrada y salida por gioTema 8   entrada y salida por gio
Tema 8 entrada y salida por gioRobert Wolf
 
Tema 8 desarrollo de aplicaciones en java por gio
Tema 8   desarrollo de aplicaciones en java por gioTema 8   desarrollo de aplicaciones en java por gio
Tema 8 desarrollo de aplicaciones en java por gioRobert Wolf
 
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
 
Tema 7 desarrollo de aplicaciones en java - lsia por gio
Tema 7   desarrollo de aplicaciones en java - lsia por gioTema 7   desarrollo de aplicaciones en java - lsia por gio
Tema 7 desarrollo de aplicaciones en java - lsia por gioRobert Wolf
 
Tema 6 gui, swing y java beans por gio
Tema 6   gui, swing y java beans por gioTema 6   gui, swing y java beans por gio
Tema 6 gui, swing y java beans por gioRobert Wolf
 
Tema 6 colecciones por gio
Tema 6   colecciones por gioTema 6   colecciones por gio
Tema 6 colecciones por gioRobert Wolf
 
Tema 5 arreglos y cadenas por gio
Tema 5   arreglos y cadenas por gioTema 5   arreglos y cadenas por gio
Tema 5 arreglos y cadenas por gioRobert Wolf
 

Más de Robert Wolf (20)

Tema6resumido
Tema6resumidoTema6resumido
Tema6resumido
 
Tema4 herencia
Tema4 herenciaTema4 herencia
Tema4 herencia
 
Tema 6
Tema 6Tema 6
Tema 6
 
Tema 16 acceso a base de datos usando jpa por gio
Tema 16   acceso a base de datos usando jpa por gioTema 16   acceso a base de datos usando jpa por gio
Tema 16 acceso a base de datos usando jpa por gio
 
Tema 15 aplicaciones de dos capas por gio
Tema 15   aplicaciones de dos capas por gioTema 15   aplicaciones de dos capas por gio
Tema 15 aplicaciones de dos capas por gio
 
Tema 14 imágenes en java por gio
Tema 14   imágenes en java por gioTema 14   imágenes en java por gio
Tema 14 imágenes en java por gio
 
Tema 13 gráficas en java por gio
Tema 13   gráficas en java por gioTema 13   gráficas en java por gio
Tema 13 gráficas en java por gio
 
Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gio
 
Tema 11 expresiones regulares en java por gio
Tema 11   expresiones regulares en java por gioTema 11   expresiones regulares en java por gio
Tema 11 expresiones regulares en java por gio
 
Tema 10 clase abstractas e interfaz
Tema 10 clase abstractas e interfazTema 10 clase abstractas e interfaz
Tema 10 clase abstractas e interfaz
 
Tema 10 entrada y salida por gio
Tema 10   entrada y salida por gioTema 10   entrada y salida por gio
Tema 10 entrada y salida por gio
 
Tema 9 pruebas unitarias por gio
Tema 9   pruebas unitarias por gioTema 9   pruebas unitarias por gio
Tema 9 pruebas unitarias por gio
 
Tema 9 aplicaciones de dos capas por gio
Tema 9   aplicaciones de dos capas por gioTema 9   aplicaciones de dos capas por gio
Tema 9 aplicaciones de dos capas por gio
 
Tema 8 entrada y salida por gio
Tema 8   entrada y salida por gioTema 8   entrada y salida por gio
Tema 8 entrada y salida por gio
 
Tema 8 desarrollo de aplicaciones en java por gio
Tema 8   desarrollo de aplicaciones en java por gioTema 8   desarrollo de aplicaciones en java por gio
Tema 8 desarrollo de aplicaciones en java por gio
 
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
 
Tema 7 desarrollo de aplicaciones en java - lsia por gio
Tema 7   desarrollo de aplicaciones en java - lsia por gioTema 7   desarrollo de aplicaciones en java - lsia por gio
Tema 7 desarrollo de aplicaciones en java - lsia por gio
 
Tema 6 gui, swing y java beans por gio
Tema 6   gui, swing y java beans por gioTema 6   gui, swing y java beans por gio
Tema 6 gui, swing y java beans por gio
 
Tema 6 colecciones por gio
Tema 6   colecciones por gioTema 6   colecciones por gio
Tema 6 colecciones por gio
 
Tema 5 arreglos y cadenas por gio
Tema 5   arreglos y cadenas por gioTema 5   arreglos y cadenas por gio
Tema 5 arreglos y cadenas por gio
 

Java gui 4

  • 2. AWT - Swing - SWT Recordatorio de sistemas de interfaces
  • 3. Sólo funcionalidades comunes a todos los ss.oo. Los controles tienen funcionamientos similares pero no idénticos Utiliza los componentes nativos de cada sistema operativo AWT (AbstractWindowingToolkit)
  • 4. Swing Extensible: proporciona distintos look & feel Componentes “ligeros” (no reservan recursos nativos) Programado en Java Implementado mediante Modelo-Vista-Controlador
  • 5. SWT (StandardWidgetToolkit) Extensible, aunque más difícil Componentes “pesados” (llama a los recursos nativos) Programado en Java (aunque exige deallocation) No sigue el Modelo-Vista-Controlador Su implementación es distinta en cada plataforma
  • 6. Personalización del Look & Feel de las aplicaciones
  • 7. import javax.swing.*; public class Main { public static void main(String[] args) { MySimpleGUI gui = new MySimpleGUI(); } } class MySimpleGUI extends JFrame { public MySimpleGUI() { setSize(400, 200); setTitle("Ventana de tipo JFrame"); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } Comportamiento por defecto en Swing
  • 8. Looks & Feels disponibles CrossPlatformLookAndFeel Utilizado por defecto Conocido como “Metal” SystemLookAndFeel Nativo del sistema Synth Básico para extender mediante archivos XML Multiplexing Para mezclar distintos Look & Feel Sun los proporciona como parte de JRE: Otros (búsqueda en internet de “Look & FeelThemes”) Gratuitos, comerciales, etc.
  • 9. Aspecto de SystemLookAndFeel Linux, Solaris (con GTK) GTK+ Linux, Solaris (sin GTK) Motif Windows Windows, Windows XP, WindowsVista IBM Unix IBM * HP UX HP * Macintosh Macintosh * * Desarrollados por cada fabricante
  • 10. import javax.swing.*; public class Main { public static void main(String[] args) { String name = UIManager.getCrossPlatformLookAndFeelClassName(); try { UIManager.setLookAndFeel(name); } catch(Exception e) { return; } MySimpleGUI gui = new MySimpleGUI(name); } } class MySimpleGUI extends JFrame { public MySimpleGUI(String name) { setSize(400, 200); setTitle("Ventana " + name); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } Definiendo el aspecto a utilizar
  • 11. Definiendo el aspecto a utilizar (II) Linux (Ubuntu) Mac OS X [...] String name = UIManager.getSystemLookAndFeelClassName(); try { UIManager.setLookAndFeel(name); } [...] Utilizando SystemLookAndFeel CrossPlatformLookAndFeel
  • 12. Definiendo el aspecto a utilizar (III) Linux (Ubuntu) Mac OS X Metal (por defecto) Metal System (por defecto) System
  • 13. Definiendo el aspecto a utilizar (IV) Windows 7 Metal (por defecto) Es importante notar que no siempre el estilo por defecto será CrossPlatform (Metal), como hemos visto en Mac OS X, por lo que es recomendable especificar el look and feel a utilizar System
  • 14. Ejercicio 1 - rápido y sencillo :) - Escoger uno de los últimos ejercicios realizados en los anteriores temas - Cambiar su look & feel y probarlo con CrossPlatform y System
  • 15. Ejercicio 2 - más largo :( Realizaremos una primera versión de un “Hundir la flota” muy simple Mezclamos varias cosas de las aprendidas durante todos los temas de interfaces Podremos ampliarlo más adelante cuando estudiemos los temas de redes
  • 16. Ejercicio 2 (Pistas) Una posible solución con tres objetos: el general que inicie los demás, el modelo de datos del juego, y el interfaz gráfico (creado mediante el diseñador de NetBeans) El modelo de datos puede ser una matriz 5x5 cuyos valores sean de una enumeración (agua, barco, barco hundido, etc) Todos los botones pueden utilizar el mismo listener, que obtenga su name del evento recibido, y desde allí se llame a un método de modelo de datos que actualice la matriz No hay una única solución válida, hagámoslo entre todos
  • 17. Ejercicio 2 (Ampliación) Incluir un nuevo tablero inferior para nuestra propia zona de juego, con su propio tablero en el modelo de datos Permitir hacer click sólo cinco veces, que serán las localizaciones de nuestros barcos.Tras inicializar nuestra zona, deshabilitar todos los botones inferiores y habilitar e inicializar la zona enemiga para comenzar el juego Revisar la inicialización de la zona enemiga, para asegurarnos de que siempre tengamos cinco (y sólo cinco) barcos asignados
  • 18. Drag & Drop entre componentes
  • 19. Drag & Drop en Swing Técnicamente está disponible entre todos los componentes gráficos de Swing (JComponent) Aunque algunos, lógicamente, requerirán código por nuestra parte Funcionan directamente JEditorPane JFormattedTextField JPasswordField JTextArea JTextField JTextPane JColorChooser Necesitan ajustes propios JList JTable JTree
  • 20. Drag & Drop en Swing (II) Funciones a utilizar (componentes estándar) setDragEnable(boolean) - Para activar el drag & drop (desactivado por defecto), disponible en los componentes estándar setDropMode(DropMode) - Para definir el funcionamiento (sólo) en los componentes no estándar: JList, JTable y JTree setTransferHandler(TransferHandler) - Para indicar el objeto encargado de realizar la transferencia de información (sólo necesitamos cambiarlo si la forma de cambiar información es distinta a la proporcionada por defecto) Funciones a utilizar (componentes no estándar) Y hay que programar el objeto TransferHandler completo Ejercicio recomendado: http://java.sun.com/docs/books/tutorial/uiswing/dnd/index.html
  • 21. Ejercicio simple de Drag & Drop Crear una aplicación con diversos controles y activar el Drag & Drop en todos ellos (setDragEnable) Básicos: JEditorPane JFormattedTextField JPasswordField JTextArea JTextField JTextPane
  • 22. Ejercicio complejo de Drag & Drop Implementaremos nuestro propio TransferHandler para utilizar con JList La lista debe inicializarse mediante un DefaultListModel: DefaultListModel model = new DefaultListModel(); for(int i = 0; i < data.length; i++) { model.addElement(data[i]); } list.setModel(model);
  • 23. TransferHandler boolean canImport(TransferHandler.TransferSupport info) Para definir qué tipo de información puede aceptar nuestro componente Transferable createTransferable(JComponent c) Para convertir la información de nuestro componente a un objeto transferible a otros componentes int getSourceActions(JComponent c) Qué acciones permite el componente (copiar, mover o ambos) boolean importData(TransferHandler.TransferSupport info) Qué hacer tras recibir información (Drop) void exportDone(JComponent c, Transferable data, int action) Qué hacer tras enviar la información (Drag) Nueva clase public class ListTransferHandler extends TransferHandler Nuestra lista la utilizará mediante: list.setTransferHandler(new ListTransferHandler());