Como Programar en Android

En los últimos años los teléfonos móviles han experimentado una gran evolución, desde los primeros terminales, grandes y pesados, pensados sólo para hablar por teléfono en cualquier parte, a los últimos modelos, con los que el término “medio de comunicación” se queda bastante pequeño.
Es así como nace Android. Android es un sistema operativo y una plataforma software, basado en Linux para teléfonos móviles. Además, también usan este sistema operativo (aunque no es muy habitual), tablets, netbooks, reproductores de música e incluso PC’s. Android permite programar en un entorno de trabajo (framework) de Java, aplicaciones sobre una máquina virtual Dalvik (una variación de la máquina de Java con compilación en tiempo de ejecución). Además, lo que le diferencia de otros sistemas operativos, es que cualquier persona que sepa programar puede crear nuevas aplicaciones, widgets1, o incluso, modificar el propio sistema operativo, dado que Android es de código libre, por lo que sabiendo programar en lenguaje Java, va a ser muy fácil comenzar a programar en esta plataforma.


HISTORIA DE ANDROID
Fue desarrollado por Android Inc., empresa que en 2005 fue comprada por Google, aunque no fue hasta 2008 cuando se popularizó, gracias a la unión al proyecto de Open Handset Alliance, un consorcio formado por 48 empresas de desarrollo hardware, software y telecomunicaciones, que decidieron promocionar el software libre. Pero ha sido Google quien ha publicado la mayor parte del código fuente del sistema operativo, gracias al software Apache, que es una fundación que da soporte a proyectos software de código abierto.
Dado que Android está basado en el núcleo de Linux, tiene acceso a sus recursos, pudiendo gestionarlo, gracias a que se encuentra en una capa por encima del Kernel, accediendo así a recursos como los controladores de pantalla, cámara, memoria flash…
En la Figura 1, abajo, se muestran las capas que conforman el sistema operativo Android:1 Un widget es una pequeña aplicación que facilita el acceso a funciones frecuentes. Más información en el
Capítulo 10
Figura 1. Sistema de capas de Android
En la imagen se distinguen claramente cada una de las capas: la que forma parte del propio Kernel de Linux, donde Android puede acceder a diferentes controladores, las librerías creadas para el desarrollo de aplicaciones Android, la siguiente capa que organiza los diferentes administradores de recursos, y por último, la capa de las aplicaciones a las que tiene acceso.
VERSIONES DISPONIBLES
El sistema operativo Android, al igual que los propios teléfonos móviles, ha evolucionado rápidamente, acumulando una gran cantidad de versiones, desde la 1.0 para el QWERTY HTC G1, hasta la 4.0 que acaba de salir al mercado.
Cupcake: Android Version 1.5
Características: Widgets, teclado QWERTY virtual, copy & paste, captura de vídeos y poder subirlos a Youtube directamente.
Donut: Android Version 1.6
Características: Añade a la anterior la mejoría de la interfaz de la cámara, búsqueda por voz, y navegación en Google Maps.
Eclair: Android Version 2.0/2.1
Características: Mejoras en Google Maps, salvapantallas animado, incluye zoom digital para la cámara, y un nuevo navegador de internet.
Froyo: Android Version 2.2
Características: Incluye hostpot Wifi, mejora de la memoria, más veloz, Microsoft
Exchange y video-llamada.
Ginger Bread: Android Version 2.3
Características: Mejoras del consumo de batería, el soporte de vídeo online y el teclado virtual, e incluye soporte para pagos mediante NFC2.
Honey Comb: Android Version 3.0/3.4
Características: Mejoras para tablets, soporte Flash y Divx, integra Dolphin, multitarea pudiendo cambiar de aplicación dejando las demás en espera en una columna, widgets y homepage personalizable.

Ice Cream Sandwich: Android Version 4.0
Características: Multiplataforma (tablets, teléfonos móviles y netbooks), barras de estado, pantalla principal con soporte para 3D, widgets redimensionables, soporte usb para teclados, reconocimiento facial y controles para PS3.
ECLIPSE COMO ENTORNO DE TRABAJO
En este curso de Android, se da por supuesto que el alumno está familiarizado con el entorno Eclipse y que además tiene nociones básicas de programación en el lenguaje Java. Lo primero que necesitaremos para poder programar en Android, es preparar el entorno de trabajo. Es necesario disponer de una versión de Eclipse Galileo 3.5 o superior para poder desarrollar nuestros proyectos. Lo segundo que necesitamos es el kit de desarrollo software para Android o Android SDK, del que se pueden encontrar varias versiones para diferentes plataformas en la página web:
http://developer.android.com/sdk/index.html
Si el sistema operativo es Windows, lo más recomendable, es descargar el instalador automático installer_rXX-windows.exe, y simplemente seguir las instrucciones. Una vez se inicia la instalación, el instalador comprueba si el equipo dispone del Java SE Development Kit (JDK). Si
no es así, muestra un mensaje como el siguiente:
2 NFC (Near-Field Communication) es una plataforma abierta para la comunicación instantánea.
Figura 2. Android Setup
Simplemente pincha sobre el botón “Visit java.oracle.com” (Figura 1.1) que redireccionará a la página mencionada para descargar el paquete necesario. Una vez instalado el JDK, se continúa con la instalación del SDK. Cuando finalice el instalador, se ejecutará el SDK Manager, en el que se deberán seleccionar todas las casillas deshabilitadas, para instalar todas las versiones de Android así como sus herramientas (Tools).
Figura 3. SDK Manager
Una vez todo esté descargado e instalado, abrir Eclipse para descargar el ADT Plugin e instalarlo en el entorno de desarrollo. Se deben seguir los siguientes pasos 1.- En la pestaña “Help”, seleccionar “Install New Software”.
2.- Presionar el botón “Add” en la esquina superior derecha.
3.- En el cuadro de dialogo que aparece, escribir “ADT Plugin” en el campo “Name”, y la siguiente URL
en el campo “Location” y pulsar “OK” (Si existe algún problema para enlazar el entorno con éste link,
probar a poner http: eliminando la ‘s’):
https://dl-ssl.google.com/android/eclipse/
4.- En “Avalaible Software”, seleccionar la casilla correspondiente a “Developer Tools” y pulsar “Next”.
5.- Leer y aceptar el Acuerdo de licencia y presionar “Finish”(si salta una advertencia de
seguridad
informando de que la autenticidad o validez del software no se puede establecer, simplemente pulsar
“OK”), y reiniciar Eclipse.
Lo único que queda es configurar el ADT Plugin. En Eclipse, en la pestaña “Window”, seleccionar “Preferences”, y elegir “Android” en el panel de la izquierda. Aparecerá un cuadro de dialogo preguntándo si se quiere enviar estadísticas a Google, seleccionar la elección y pulsar “Proceed”. Ahora presionar el botón “Browse” y seleccionar la ruta del directorio dónde se haya ubicado el SDK (normalmente C:\Archivos de programa\Android\Android-sdk\) y pulsar “Apply” y “OK”.
Figura 4. Preferences
Por último, hay que comprobar que el SDK está completamente actualizado. Para ello, en la pestaña “Window”, seleccionar “Android SDK and AVD Manager”. En la sección “Available Packages”, seleccionar todas aquellas casillas a instalar. Presionar “Install Selected” para comenzar con la descarga e instalación
Figura 5. Repository
¡Y ya está! Ya tenemos preparado el entorno para poder programar en Android.
PERSPECTI VA S Y EM ULADO R
1.P E R S P E C T I V A J A V A
Dados por sabidos los conocimientos básicos sobre Eclipse y la programación en Java, ésta perspectiva debe ser conocida por todos.
Figura 6. Perspectiva Java
Es la interfaz de usuario (o conjunto de vistas) que provee el JDT Plugin para poder programar en lenguaje Java. Esta interfaz, proporciona una serie de herramientas (se puede considerar como una determinada organización de las vistas), para el correcto desarrollo de programas y aplicaciones, y será la que utilizaremos para programar en este curso de Android.
2.P E R S P E C T I V A D D M S
En este caso, es el ADT Plugin el que nos proporciona la nueva perspectiva, por lo que lo primero que hay que hacer es habilitarla.
En la pestaña “Window”, seleccionar “Open Perspective” -> “Other”-> “DDMS”.
Figura 7. Perspectiva DDMS
Esta perspectiva, sirve para poder programar y realizar debugging al mismo tiempo, lo que es una forma muy efectiva de programar.
Aunque se programará con la perspectiva Java, a la hora de corregir errores se puede pasar a la perspectiva DDMS.
3 . E M U L A D O R
Una vez tengamos el proyecto listo para ejecutar, entra en escena el emulador de Android. Éste proporciona una vista especial para comprobar si la aplicación hace lo que se desea. A continuación se muestra la vista del emulador para la versión 2.2 de Android:
Figura 8. Emulador para Android 2.2
Lo primero que hay que hacer cuando se quiere ejecutar una aplicación, es pinchar sobre el proyecto con el botón derecho, y en “Run as” seleccionar “Android Application”, entonces se lanzará el emulador más apropiado siempre que esté creado (más adelante, se explicará cómo generar los emuladores).
No se debe parar la ejecución del emulador, dado que cada vez que se ejecuta el mismo, necesita de muchos recursos del computador, por lo que tarda bastante en lanzarse, y realmente no es necesario cerrarlo, puesto que cada vez que se lleva a cabo una ejecución del proyecto, la aplicación se reinstala en el emulador.UN EJEMPLO: “HOLA ANDROID”
Vamos a crear nuestro primer proyecto en Android, pero antes veamos de qué se compone cada uno. Al generar un nuevo proyecto de Android, dado que estamos utilizando el entorno Eclipse, éste va a generar automáticamente la distribución de carpetas que contendrá la aplicación, la cuál será común a todos los proyectos Android.
Figura 9. Sistema de carpetas de un proyecto
Veamos el significado de cada carpeta por separado:
Carpeta src:
Recoge la totalidad del código fuente (Java) de la aplicación. En el ejemplo que vamos a llevar a cabo, Eclipse generará automáticamente el código base de la ventana principal (Activity).
Carpeta res:
Contiene los recursos necesarios para generar una aplicación Android .- res/drawable/: Guarda las imágenes y se divide en: drawable-ldpi, drawable-mdpi y drawable-hdpi, que
dependerán de la resolución del dispositivo.
.- res/raw/: Contiene archivos de propósito general, en otro formato que no es XML.
.- res/layout/: Incluye los archivos que definen el diseño de la interfaz gráfica, siempre en
.- res/values/: Guarda los datos y tipos que utiliza la aplicación, tales como colores,
cadenas de texto,estilos, dimensiones…
Carpeta gen:
Ésta carpeta guarda un conjunto de archivos (de código Java) creados automáticamente cuando se compila el proyecto, para poder dirigir los recursos de la aplicación. El archivo R ajusta automáticamente todas las referencias a archivos y valores de la aplicación (guardados en la carpeta res).Carpeta assets:
Guarda el resto de archivos necesarios para el correcto funcionamiento de la aplicación, como los archivos de datos o de configuración. La principal diferencia entre los recursos que almacena ésta carpeta y los que guarda la carpeta “res”, es que los recursos de ésta última generan un identificador por recurso, identificador que se encargará de
gestionar el fichero R y sólo se podrá acceder a ellos a través de determinados métodos de
acceso, mientras que los recursos almacenados en la carpeta “assets” no generan identificador alguno y se accederá a ellos a través de su ruta, como se hace con cualquier otro fichero.
Archivo AndroidManifest.xml:
Éste archivo es uno de los más importantes de cualquier aplicación Android. Se genera automáticamente al crear el proyecto, y en él se encuentra definida la configuración del proyecto en XML (Actividades, Intents, los permisos de la aplicación, bibliotecas, etc.). Por ejemplo, el proyecto que vamos a generar (“Hola Android”), contiene un AndroidManifest.xml como el siguiente:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.example.hello"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" >
<activity android:label="@string/app_name" android:name=".Hola" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>


Otra vista diferente del manifiesto es la siguiente:
Figura 10. Editor Android Manifest
Y por fin, una vez explicadas cada una de las partes que componen el proyecto, vamos a crear nuestro primer proyecto con Android. Primero pinchar en “File”->“New”->“Other”-
>“Android Project”, saldrá la pantalla que se muestra a continuación (“Create Android Project”).
Simplemente en “Project Name” poner: HelloAndroid y pulsar “Next”. En la siguiente pantalla, “Select Build Target”, seleccionar la versión de Android sobre la que construir el proyecto. Vamos a seleccionar Android 2.2, para que nuestra aplicación pueda correr en cualquier terminal que tenga ésta versión o una posterior.
En la última pantalla antes de dar por concluida la configuración del nuevo proyecto,
“Application Info”, completar los siguientes campos:
“Application Name”: Hello, Android
“Package Name”: org.example.hello
“Create Activity”: Hello
Figura 11. Create Android Project
Figura 12. Application Info Para ejecutar nuestra aplicación, primero debemos tener creado un emulador de nuestra versión de Android. Para ello, pinchar en el símbolo que abre el “Android Virtual Device Manager”, y pulsar en “New”:
Figura 13. Símbolo Android Virtual Device Manager
En la siguiente pantalla rellenar los siguientes campos:
.- “Name”: em2.2
.- “Target”: Android 2.2 – API Level 8
.- “Size”: 128 MiB
.- “Built-in”: Default(WVGA800)
.- Si se quiere añadir funcionalidades Hardware, en “Hardware” pulsar “New”, y
seleccionar la support”
la opción/es deseada/s. En el ejemplo se ha añadido la funcionalidad “Camera
.- Por último, pulsar “Create AVD”.
Figura 14. Create AVD
Ahora ya podemos ejecutar nuestra aplicación. Pinchar con el botón derecho del ratón sobre el proyecto, y en “Run As”, seleccionar “Android Application”. Se lanzará el emulador (hay que tener paciencia, pues debido a que consume muchos recursos, tardará un rato), y pasado un tiempo, se mostrará nuestro primer programa en Android:
Figura 15. Simulación Hello Android

COMPONENTES DE UNA APLICACION

Para diseñar una aplicación en Android, es necesario tener claros los elementos que la componen y la funcionalidad de cada uno de ellos. Ya hemos visto el ejemplo del “Hola Android”, por lo que podemos intuir algunos de ellos. Uno de los aspectos más importantes a tener en cuenta es su funcionamiento. Android trabaja en Linux, y cada aplicación utiliza un proceso propio. Se distinguen por el ID, un identificador para que solo ella tenga acceso a sus archivos. Los dispositivos tienen un único foco, la ejecución principal, que es la aplicación que está visible en la pantalla, pero puede tener varias aplicaciones en un segundo plano, cada una con su propia pila de tareas. La pila de tareas es la secuencia de ejecución de procesos en Android. Se componen de actividades que se van apilando según son invocadas, y solo pueden terminarse cuando las tareas que tiene encima están terminadas, o cuando el sistema las destruye porque necesita memoria, por lo que tienen que estar preparadas para terminar en cualquier momento. El sistema siempre eliminará la actividad que lleve más tiempo parada. En caso de que el sistema necesitase mucha memoria, si la aplicación no está en el foco, puede ser eliminada por completo a excepción de su actividad principal
Figura 1. Pila de actividades Android
Una de las características principales del diseño en Android es la reutilización de componentes entre las aplicaciones, es decir, dos aplicaciones diferentes pueden utilizar una misma componente, aunque esté en otra aplicación para así, evitar la repetición innecesaria de código, y la consiguiente ocupación de espacio. Los componentes son los elementos básicos con los que se construyen el proyecto. Hay cuatro tipos, pero las aplicaciones se componen principalmente de actividades. Habrá tantas actividades como ventanas distintas tenga la aplicación. Sin embargo, por si solos, los componentes no pueden hacer funcionar una aplicación. Para ello están los intents.
Todos ellos deben declararse en el AndroidManifest.xml (junto con otros elementos que se mostrarán después) con el mismo nombre que lleve la clase asociada. Por ejemplo, la clase MainActivity, será definida en el AndroidManifest con el mismo nombre.
ACTIVIDADES
Una actividad (o Activity) es la componente principal encargada de mostrar al usuario la interfaz gráfica, es decir, una actividad sería el equivalente a una ventana, y es el medio de comunicación entre la aplicación y el usuario. Se define una actividad por cada interfaz del proyecto. Los elementos que se muestran en ella deben ser definidos en el fichero xml que llevan asociado (que se guarda en ./res/layout) para poder ser tratados en la clase NameActivity.class, que hereda de la clase Activity.
Dentro del fichero xml asociado a la actividad, se definen los elementos tales como ubicación de los elementos en la pantalla (layouts), botones, textos, checkbox, etc., cono se verá en capítulos posteriores. Las actividades tienen un ciclo de vida, es decir, pasan por diferentes estados desde que se inician hasta que se destruyen. Sus 3 posibles estados son:
Activo: ocurre cuando la actividad está en ejecución, es decir, es la tarea principal
Pausado: la actividad se encuentra semi-suspendida, es decir, aun se está ejecutando y es visible, pero no es la tarea principal. Se debe guardar la información en este estado para prevenir una posible pérdida de datos en caso de que el sistema decida prescindir de ella para liberar memoria.
Parado: la actividad está detenida, no es visible al usuario y el sistema puede liberar memoria. En caso de necesitarla de nuevo, será reiniciada desde el principio.
Una vez definido el ciclo de vida, hay que tener en cuenta qué métodos son importantes en cada uno de ellos. Aquí están los métodos más importantes de una actividad:
OnCreate (Bundle savedInstanceState): es el método que crea la actividad. Recibe un parámetro de tipo Bundle, que contiene el estado anterior de la actividad, para preservar la información que hubiera, en caso de que hubiera sido suspendida, aunque también puede iniciarse con un null si la información anterior no es necesaria o no existe.
OnRestart(): reinicia una actividad tras haber sido parada (si continúa en la pila de tareas). Se inicia desde cero.
Onstart(): inmediatamente después de onCreate(Bundle savedInstanceState), o de onRestart() según corresponda. Muestra al usuario la actividad. Si ésta va a estar en un primer plano, el siguiente método debe ser onResume(). Si por el contrario se desarrolla por debajo, el método siguiente será onStop(). Es recomendable llamar al método onRestoreInstanceState() para asegurar la información
OnResume(): establece el inicio de la interactividad entre el usuario y la aplicación.
Solo se ejecuta cuando la actividad está en primer plano. Si necesita información previa, el método onRestoreInstanceState() aportará la situación en que estaba la
actividad al llamar al onResume().También puede guardar el estado con onSaveInstanceState().
OnPause(): se ejecuta cuando una actividad va a dejar de estar en primer plano, para dar paso a otra. Guarda la información, para poder restaurar cuando vuelva a estar activa en el método onSaveInstanceState(). Si la actividad vuelve a primer plano, el siguiente método será onResume(). En caso contrario, será onStop().
OnStop(): la actividad pasa a un segundo plano por un largo período. Como ya se ha dicho, el sistema puede liberar el espacio que ocupa, en caso de necesidad, o si la actividad lleva parada mucho tiempo.
OnDestroy(): es el método final de la vida de una actividad. Se llama cuando ésta ya no es necesaria, o cuando se ha llamado al método finish().
Además de estos métodos, cabe destacar dos más, que son de vital importancia:
OnSavedInstanceState(): guarda el estado de una actividad. Es muy útil cuando se va a pausar una actividad para abrir otra.
OnRestoreInstanceState(): restaura los datos guardados en onSavedInstanceState()
al reiniciar una actividad.
Figura 2. Ciclo de vida de una actividad
SERVICIOS
Los servicios (o service) son tareas no visibles que se ejecutan siempre por debajo, incluso cuando la actividad asociada no se encuentra en primer plano. Tiene un hilo propio (aunque no se pueden ejecutar solo), lo que permite llevar a cabo cualquier tarea, por pesada que sea. No necesita interfaz, a no ser que se pida explícitamente, en cuyo caso la clase Service la exportaría.
El ciclo de vida de un servicio se inicia con el método onCreate(Bundle), y se libera con el método onDestroy(). Sin embargo, el desarrollo puede llevarse a cabo de dos maneras, dependiendo de cómo se lance:
Si se llama al método startService(), esto implicará que el servicio ejecutará todo su ciclo vital. El siguiente método tras onCreate(Bundle) será onStartComand(Intent, int, int). Para terminar el servicio externamente, se usa stopService(), e internamente, stopSelf() ó stopSelfResult(), ambos de la clase Service.
En otro caso, si el servicio se llama con bindService(), el usuario podrá interactuar mediante la interfaz que exporta el servicio, y tras onCreate(Bundle) se ejecutará el método onBind(Intent). En este caso, el servicio se termina llamando al método
onUnbind(Intent). También es posible reiniciarlo con el método onRebind(Intent).
Figura 3. Ciclo de vida de un servicio
R e c e p t o r e s d e M e n s a j e s d e D i s t r i b u c i ó n
También llamados broadcast receiver o notificaciones, son los encargados de reaccionar ante los eventos ocurridos en el dispositivo, ya sean generados por el sistema o por una aplicación externa. No tienen interfaz, pero pueden lanzar una activity por medio de un evento. La clase que defina estos componentes heredará de la clase BroadCastReceiver. Su ciclo de vida es muy corto, ya que solo están activos mientras se ejecuta el método onReceive (Context, Intent), que es equivalente al onCreate(Bundle) de otros componentes. El objeto Context nos pasa es estado actual, y el intent, nos permitirá lanzar el evento.
P r o v e e d o r e s d e c o n t e n i d o s
Estos proveedores en inglés llamados content provider, se encargan de que la aplicación pueda acceder a la información que necesita, siempre que se haya declarado el correspondiente provider en el AndroidManifest , compartiendo información sin revelar estructura u orden interno. Implementan una interfaz, pero se comunica con ella a través de la clase ContentResolver. Cada vez que se usa un ContentResolver, se activa un ContentProvider. Para obtener los datos necesarios, es necesario conocer la URI (identificador) del dato, los campos que tiene, y los tipos de esos campos. Con esto ya podemos llamar al método ContentResolver.query().
I n t e n t s
Los intents son el medio de activación de los componentes (excepto los content provider, que se activan usando ContentResolver). Contiene los datos que describen la operación que desarrollará el componente a quien va dirigido. Se declaran en el AndroidManifets con la etiqueta . Pueden ser explícitos o implícitos. Los implícitos no especifican el componente al que va destinado, mientras que el explícito, si. Según el componente, los intents se tratan de diferentes maneras:
Activity: los intents se lanzan desde el método starActivity(Intent) ó startActivitForResult(Intent). La información se extrae con el método getIntent().

Los intents tienen definidas algunas acciones para las activity, es decir, informan de la acción a realizar. Entre ellas, por ejemplo se encuentra ACTION_CALL que inicia una llamada.
Service: para este tipo de componentes, los intents se pasan a los métodos startService(Intent) o bindService(Intent) dependiendo del tipo de ciclo que escojamos. La información será extraída por el método getIntent() en el primer caso y onBind() en el segundo.
Otra posibilidad es que el servicio sea lanzado por un intent, si aun no esta en funcionamiento.
Broadcast Receiver: en este caso, el intent será enviado a todos los métodos que pueden recibir el intent : sendBroadcast(), sendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler, int, String, Bundle),
endStickyBroadcast()…, que lo analizarán en su método onReceive(Context, Intent).
También tienen acciones definidas para este componente, aunque en este caso lo que hacen es informar de que ha ocurrido el evento. Por ejemplo tenemos ACTION_BATTERY_LOW, que informa de que la batería esta baja, o ACTION_SCREEN_ON, para cuando la pantalla se ilumina.
I n t e n t - f i l t e r s
Utilizados únicamente por los intents implícitos, los intent-filters definen (y delimitan) qué tipos de intent puede lanzar la actividad, o qué tipos de intent puede recibir un broadcast. Por ejemplo, para un intent que no especifica a que actividad va dirigido, se consulta el intent filter de una de ellas, y si lo satisface, el intent usará lanzará esa actividad. Se definen en el AndroidManifest con la etiqueta . La información que pasan los intents debe estar contenida en la definición del intent filter para que la componente pueda ser activada (o pueda recibirlo en el caso del broadcast). Esta información se compone de tres campos:
Action: string que informa del tipo de acción llevada a cabo. Las acciones pueden ser dadas por la clase Intent, por una API de Android o definidas por el diseñador.
Data: informa del identificador (URI) del dato que se asocia a la acción y del tipo de ese dato. Es importante la coherencia ya que si la acción requiere un dato de tipo texto, un intent con un dato de tipo imagen no podría ser lanzado.
Category: string que contiene información adicional sobre el tipo de componente al que va dirigido el intent. La lista de categorías esta incluida en la clase Intent
A n d r o i d M a n i f e s t
Como ya se introdujo en el tema anterior, este fichero es un documento xml en el que se declaran los elementos de la aplicación, así como sus restricciones, permisos, procesos, acceso a datos e interacciones con elementos de otras aplicaciones. Cada elemento se declara con una etiqueta única. No debe confundirse este documento con el xml asociado a cada actividad. Los elementos gráficos y distribución de la pantalla serán definidos para cada actividad dentro de su xml, pero no en el AndroidManifest. Al implementar el AndroidManifest se deben seguir unas pautas para hacer más
comprensible el documento:


Figura 4. Código generado automáticamente al crear el AndroidManifest
Este código es generado por el SDK a partir de la información que se ha proporcionado al crear el proyecto. Se declara el manifiesto con la etiqueta y dentro se incluye el paquete en que se encuentra la aplicación y la versión del código. También incluye la versión del sdk que usa
(con la etiqueta ). A continuación, el usuario definirá la aplicación, incluyendo todos sus componentes en la etiqueta . La declaración de componentes puede ser desordenada, pero para un mejor manejo de este fichero, se recomienda seguir algún tipo de orden. Las activities se declaran con la etiqueta . En ellas, lo primero es añadir el nombre de la actividad (android:name), que coincidirá con el de la clase en que se define el comportamiento. Además se pueden añadir imágenes, así como cambiar los atributos de que se dispone. A continuación, se declararían los intent filters asociados a la actividad, en caso de que los haya.
Los service se declaran con la etiqueta y aunque tienen menos atributos que las actividades, lo principal es darles un nombre y especificar si el sistema puede o no utilizarlo mediante el atributo enabled (android:enabled). Después irían los intent filters. Los broadcast receiver utilizan y al igual que service, necesita los atributos name y enabled, así como intent filter en caso de necesitarlos. Todos los componentes anteriores declaran del mismo modo sus intent filters. Los content provider utilizan la etiqueta y son los únicos componentes en los que no se declaran intent filters, ya que no son necesarios. De nuevo el único atributo necesario es el nombre.
U n e j e m p l o p r á c t i c o
A continuación se describe un ejemplo en Android aplicando los recursos aprendidos anteriormente. Al comienzo de un proyecto, tras crearlo en eclipse, lo único que tenemos es la MainActivity, o clase principal. En la siguiente imagen se muestra un ejemplo en el que se puede ver la estructura básica de una activity. Se sobrescribe el método onCreate(Bundle) y se muestra con el método setContentView( ). En la actividad se definirán las acciones propias de los elementos del
xml. En este caso, tenemos un botón que, al presionar, abre una nueva actividad llamada producto.


Figura 5. Ejemplo de Activity
Es conveniente implementar la acción del botón back, pausando la actividad, sin destruirla. Además, también se puede incluir la típica pregunta “¿Está seguro de que desea salir?”:


Figura 5. Implementación del botón back
El archivo xml asociado a la MainActivity contendría el botón con el id botonInicial


Figura 6. Ejemplo xml de Main activity (a)


Figura 7 Ejemplo xml de Main activity (b)
Una vez la actividad está definida, hay que tener claro que recursos le serán necesarios. En este caso, y para que sirva de ejemplo, la actividad activará un Service (debidamente añadida en el androidManifest) que no tendrá que interactuar con el usuario, por lo que no habrá que sobrescribir el método onBind(Intent). Los métodos que se necesitan son onCreate(), startService(), onStartCommand y onDestroy(). En este ejemplo, el servicio reproducirá un sonido al inicio de la aplicación. De la gestión del sonido se ocupa la clase Reproductor.
E j e m p l o d e S e r v i c e
Cuando se ha creado el servicio, se añade en la actividad en la que será llamado.


Figura 8. Uso de Service en la clase MainActivity
Otro componente que se puede incluir en la aplicación es el broadcastReceiver, por ejemplo para que al registrar una llamada entrante, la aplicación actúe de un modo determinado: se cierre, se suspenda o guarde la información existente.


Figura 9. Ejemplo de Broadcast Receiver
Se puede añadir tantos componentes como sean necesarios. También es conveniente incluir algún proveedor de contenidos, pero para ello es necesario estudiar previamente el manejo
de bases de datos. No se debe olvidar incluir todos estos componentes en el AndroidManifest.


Figura 10. Ejemplo AndroidManifest
En resumen, las aplicaciones en Android tienen diverso grado de dificultad, dependiendo de su funcionalidad, pero la estructura siempre es la misma. Uniendo estos conocimientos al uso de recursos gráficos, bases de datos, mapas, y otros elementos, las posibilidades de estas aplicaciones son bastante amplias.


Lenguajes de programación en JAVA y su grandes posibilidades al mercado laboral

Por qué Java es el Lenguaje de Programacque le abrirá lapuertas del Éxito Laboral y Económico
Antes de comenzar…

Si eres de las personas que les gusta utilizar computadoras a diario o si, simplemente, te atrae la idea de trabajar haciendo uso de ellas entonces de seguro habrás escuchado mencionar el término Java. Además, seguramente sabes que se trata de un lenguaje de  programación avanzado y no de una isla en el pacífico.
Y es que ante tantos cambios en el veloz mundo en el que vivimos, las nuevas tecnologías se hacen cada vez más populares, al punto que casi todo el mundo las reconoce
o ha escuchado hablar de ellas de una forma u otra. Esto genera que la gente se adapte más rápido a dichas tecnologías, dando paso así a la necesidad de que éstas evolucionen constantemente.
Por esta razón, entre muchas otras más, es que los nuevos profesionales no pueden quedarse atrás, y deben “volar” para tratar de adaptarse a las necesidades que demandan dichos cambios. En el caso puntual del diseño y la programación se puede hablar de Java como lo más avanzado y lo que mejor satisface la demanda de necesidades de este mundo hambriento de cambios y de tecnologías al día.
Pero, ¿Qué es Java?
Se habla de Java como un lenguaje de programación orientado a objetos, lo cual significa que hace uso de objetos y de sus interacciones para diseñar programas y aplicaciones en la esfera informática.
Java está relacionado en cierta forma con otros lenguajes como el C++. Sin embargo el lenguaje Java cada vez se posiciona más como el elegido para el desarrollo de todo tipo de diseños y aplicaciones para la Web y Empresariales, lo cual hace que su popularidad aumente a un ritmo acelerado. Como puedes ver, no es pura casualidad que Java sea considerado como uno de los lenguajes de programación más empleados en la actualidad en todo tipo de aplicaciones informáticas y para la Internet.
¿Por qué aprender Java?
Esta es una pregunta que puede estar pasando por tu mente en estos momentos. Quizás lo habías considerado antes o, quizás, pensabas en aprender cualquier otro lenguaje de programación. Antes de que tomes cualquier decisión permíteme contarte algunas de las razones y ventajas que tiene aprender Java en lugar de otro lenguaje.
La tecnología Java es gratis.
 Java es usado ampliamente en un sinnúmero de ambientes, como pueden ser Windows, Mac o
Linux.
Su código API le permite hacer infinidad de cosas.
Java ofrece mucha seguridad contra infiltraciones y virus.
Su sistema de documentación es bastante conocido y empleado.
 Java cuenta con una gran biblioteca de funcionalidades estándar.
 Java es mucho más compatible con las tendencias actuales de las aplicaciones para la Internet.
Ya sé que estás razones para aprender Java te pueden sonar extrañas o desconocidas, al menos que ya tengas conocimientos sobre programación. En palabras más comunes, los siete aspectos anteriormente mencionados significan que el lenguaje Java es más versátil, más seguro, más necesitado y más fácil de aprender.
Por si aún no comprendes a cabalidad de que se tratan estas ventajas mencionadas de seguro te interesará saber algo: aprender a programar en Java te dará muchas ventajas en el mercado laboral, lo cual significa, mayores oportunidades de obtener empleos mejor pagados.
¿No lo crees? En la siguiente sección detallaremos el por qué aprender Java adecuadamente te posicionará entre una élite de personas que están en  alta demanda y que tienen la posibilidad de ganar más dinero con, posiblemente, menos trabajo.
Has llegado al punto que recordarás y te interesará más por el simple hecho de imaginar cuanto podría mejorar tu vida si aprendieras Java de manera adecuada. Sin más preámbulos, te dejamos a tu consideración, las 3 razones más poderosas y significativas para aprender Java.
 Razón 1: Aprender Java
incrementará tus posibilidades de conseguir trabajo
En estos tiempos cuando encontrar un trabajo decente es tan difícil se hace necesario diferenciarnos de la competencia para poder tener acceso a las mejores ofertas laborales en el mercado. Lo cierto es que los
trabajos tradicionales cada vez son más escasos, abriéndole con ello, paso a los nuevos tipos de oficios que requieren un gran uso y apropiación de las Nuevas Tecnologías de la Información y la Comunicación.
La necesidad de emplear conocimientos en programación de sistemas, por ejemplo, es una de las mas apremiantes actualmente debido al poco
número de personas que cumplen con los requisitos para ocupar cargos que impliquen el uso avanzado de lenguajes de programación como el JAVA.
Esa es la principal razón por la cual, en la mayoría de los sitios Web de búsqueda de empleo, podemos encontrar muchas ofertas de empleadores solicitando personal con conocimiento sustentado en el lenguaje de programación Java. Por mucho que las empresas
publiquen ofertas laborales no siempre logran encontrar personas con capacidad para desarrollar los diversos trabajos que implica la programación o, incluso, cualquier uso avanzado que se le pueda dar a las herramientas informáticas.
¿Puedes ver las puertas abiertas para una persona que se ha capacitado con profesionales en el tema? De seguro que si. Y, aunque aparezcan muchos conocedores en los temas requeridos, la verdad, no es lo mismo contratar un “experto” empírico que uno que pueda sustentar con títulos los conocimientos que posee.
Esta es una regla que se cumple sobretodo para las empresas serias que no están en capacidad de arriesgarse a contratar alguien que no cumpla a cabalidad con sus requisitos.
 Razón 2: Aprender
Java mejorará tu desarrollo profesional
y tu estabilidad laboral
Esta razón está estrechamente ligada a la razón número 1 pero es necesario establecer la diferencia.
Una vez hayas logrado obtener una entrevista de empleo, tu empleador potencial querrá conocer el nivel de conocimientos con
que cuentas para poder saber si debe o no darte el empleo. Para esto es necesario que demuestres con pruebas que en realidad tienes los conocimientos necesarios para desarrollar las labores que se te asignarán.
Ante esta situación inminente debes estar preparado para responder a tal exigencia y así dar esa buena primera impresión.
Pero, ¿cómo lograr dar esa buena impresión?
Aunque te parezca difícil, dar esa primera impresión de forma positiva no es una ciencia ni mucho menos, pero sin duda hay que cumplir ciertos requisitos. Para lograrlo, lo
primero que debes hacer es hablarle al empleador con total seguridad y confianza en ti mismo. Deberás mostrar que eres tú quien merece el empleo, más que cualquier otro de los candidatos.
Tan importante como lo anterior, deberás, además, demostrar que tus conocimientos en el área son tan aptos como él lo necesita.
 Parece fácil, ¿cierto? Pues, esto último no es tan fácil. Si bien podrías contar con algún título que te certifique tus conocimientos, muchos empleadores son altamente exigentes en cuanto a qué institución confiere dicha certificación, y sobre todo que cuentes con el conocimiento y la experiencia necesaria para desarrollar los proyectos y tareas asignadas.
Al respecto permíteme por favor contarte algo que te hará diferenciarte del resto de tus competidores fácilmente: la preparación adecuada.
Y es que la mayoría de las personas intentan acceder a empleos basándose en su experiencia pero en cero preparación. Esto puede funcionarte en algunos casos, sobretodo si eres amigo del empleador. Pero, cualquier otra persona te rechazaría de inmediato si no puedes comprobar que sabes lo que dices saber.
¿No lo crees? Entonces responde honestamente las siguientes preguntas:
¿Contratarías tú a una persona que no puede sustentar con pruebas que se ha preparado para el empleo que le ofreces? ¿No crees que si te preparas como es debido serías tomado mucho más en serio por cualquier empleador?
Ya conoces la respuesta.
 Razón 3: Aprender
Java aumentará al instante tus aspiraciones profesionales y económicas
Si quieres ser un profesional con futuro y además quieres diferenciarte de los demás en tu ramo debes, por lo menos, conocer lo último en tu área de experiencia. No puedes conformarte simplemente con saber lo que aprendiste hace tiempo que, quizás ya está revaluado hoy en día, o no tiene las mismas aplicaciones que antes tenía.
Hablando específicamente de lenguajes de programación, en la actualidad resulta vital aprender Java, ya que este lenguaje presenta alta demanda en el mercado, y aún no es manejado apropiadamente por muchos programadores.
Otra gran ventaja relacionada tiene que ver con tus habilidades técnicas. Ya que el lenguaje de programación Java es algo avanzado, el aprenderlo te brindará herramientas    de conocimiento que te llevarán un paso adelante de la mayoría de quienes dicen ser tus competidores. Tus habilidades se incrementarán y, con ello tus capacidades y oportunidades de obtener mejores ingresos y mayor reconocimiento laboral.
Sobre este último aspecto no sobra decirte que, entre más avanzados sean tus conocimientos gozarás de más y mejores oportunidades de promoción y aumentos salariales.
¿Ya lo puedes ver?
Imagino que en estos momentos ya te has convencido de lo mucho que te convendría  aprender, de manera adecuada, a programar en Java. Y es que las ventajas y beneficios de conocer este lenguaje de programación hablan por sí solas.
MundoGP




Curso de programación en java web, sin misterios, paso a paso y desde cero

Al pasar los años el lenguaje de programación Java es uno de los más utilizados a nivel mundial.Crear sistemas de misión crítica, robustos, flexibles y confiables ha sido uno de los grandes retos en el desarrollo de software a la medida. Al día de hoy Java sigue demostrando ser una plataforma en la cual apoyarnos para crear este tipo de sistemas.
Además, Java tiene una de las comunidades más grandes a nivel mundial y es TOTALMENTE LIBRE DE USO.
Java tiene un crecimiento impresionante, generando bastantes de ofertas laborales nacionales e internacionales.
Al ser relativamente complejo, aún no está saturado por la competencia y este es el momento ideal para abrirte las puertas.


Fundamentos de Java: Conoce Java desde los fundamentos. Aprenderás la sintaxis básica, tipos de Datos, Sentencias de Control y la creación de Clases y Objetos.
¿Qué es Java? Este es la base de. Lo que estudiaremos desde un punto de vista práctico y desde cero.
1. Elementos Básicos del Lenguaje desde los tipos primitivos hasta tipos ya definidos en Java (Estos elementos y varios de los que estudiaremos, son la base para temas como programador en Java)
2. Sentencias Java tales como if, else, switch, for, while, do-while. Veremos ejemplos prácticos para dejar claro cuando usar cada una de estas estructuras.
3. Métodos en Java desde métodos de instancia y métodos estáticos, veremos como declarar y las mejores prácticas para crear métodos en nuestras clases Java.
4. Clases y Objetos y cómo entenderlos realmente. Utilizaremos distintos métodos didácticos, tales como blueJ, Netbeans, entre otros, para explicar qué es una Clase yun Objeto, y la diferencia entre ellos, de tal manera que nunca más tendrás ninguna confusión para definirlos adecuadamente.
5. Manejo de Arreglos tanto arreglos de una dimensión como arreglos de múltiples dimensiones. Aprenderás a crear, instanciar y manipular cualquier tipo de arreglo en Java, tanto arreglos de tipos primitivos como de cualquier tipo Object en Java.

Programación Java: Aprende a detalle las características de la Programación Orientada a Objetos, el manejo de Colecciones, el concepto de Herencia y Polimorfismo.
6. Modificadores de Acceso y su uso en Java. Con esto garantizaremos que nuestras clases estén correctamente configuradas y con la seguridad adecuada para evitar modificación de información no deseados en nuestras clases Java.
7. Herencia es el tema central en la programación orientada a Objetos, y la explicaremos de tal manera que no volverás a tener confusión cuando debas aplicar el concepto de Herencia en el diseño de tus clases..
8. Polimorfismo es un tema te permitirá reutilizar código y aplicar las mejores prácticas de la Programación Orientada a Objetos (POO)
9. Manejo de Excepciones. Revisaremos cómo manejar las excepciones, como crear nuestras propias excepciones y finalmente las mejores prácticas para propagar las excepciones en nuestras aplicaciones Java..
10. Clases Abstractas e Interfaces. Veremos qué es cada uno de estas clasificaciones, cómo aplican en Java y veremos la diferencia entre ambos conceptos para que nunca más tengas confusión de cuando utilizar un concepto u otro.
11. Colecciones en Java. Estudiaremos las distintas clasificaciones existentes en Java, tales como List, Set y Map. Además veremos varios ejemplos prácticos para observar las ventajas que este tipo de estructuras de datos tienen sobre los arreglos en Java

SQL con Java JDBC: Aprende a diseñar correctamente una aplicación Java para comunicarte con cualquier Base de Datos Relacional vía JDBC, utilizaremos MySQLy Oracle
12. ¿Qué es JDBC? Estudiaremos la tecnología JDBC, la cual nos permitirá conectarnos hacia prácticamente cualquier base de Datos relacional, como puede ser MySql y Oracle.
13. Cómo realizar una conexión a una Base de Datos. Veremos los pasos necesarios para establecer una comunicación exitosa y simple entre Java y cualquier base de datos.
14. Ejemplos con Mysql. Crearemos varios ejemplos para demostrar cómo realizar consultas, inserciones, modificaciones y eliminación de datos sobre una base de datos de MySql.
15. Ejemplos con Oracle. Utilizaremos el motor de bases de datos más popular al día de hoy, a su vez veremos cómo utilizar JDBC para llamar correctamente a funciones, procedimientos almacenados y cursores de Oracle.
16. Patrones de Diseño en la creación de la Capa de Datos. Aplicaremos las mejores prácticas y patrones de diseño para la creación de una capa de datos efectiva con JDBC. Los patrones de diseño que estudiaremos son DAO (Data Access Object) y DTO (Data Transfer Object)

HTML, CSS y JavaScript: Domina la programación Web, utilizando HTML, CSS y JavaScript, y sienta las bases para crear aplicaciones Web Dinámicas con Java.
17. ¿Qué es HTML? Este es el lenguaje base para crear páginas Web, a su vez sentaremos las bases para crear aplicaciones Web dinámicas..
18. Componentes Básicos de HTML. Estudiaremos desde el punto de vista de programador (y no de diseñador gráfico) el uso del lenguaje HTML para la creación de aplicaciones Web.
19. ¿Qué es CSS y dónde se aplica? Mostraremos el uso de las Hojas de Estilo CSS y su uso dentro de una aplicación Web .
20.Componentes CSS. Veremos el uso básico de los elementos CSS y crearemos ejemplos prácticos aplicando las mejores prácticas en el uso de las hojas de estilo.
21. ¿Qué es JavaScript y dónde aplica? Aprenderemos a utilizar JavaScript con varios ejemplos prácticos y no volverás a tener dudas respecto a las diferencias entre Java y JavaScript, ya que estudiaremos el rol de cada una de estas tecnologías.
22. Ejemplo de Integración de HTML, CSS y JavaScript. Al finalizar este módulo crearemos algunas páginas Web para que puedas integrar correctamente las 3 tecnologías descritas.

Servlets y JSPs: Desarrolla Web dinámicas utilizando Servlets y JSPs, aplicando patrones de diseño como el MVC y las mejores técnicas en aplicaciones Web Java.
23. ¿Qué es una aplicación dinámica?. Veremos la diferencia entre una simple página Web estática, y la necesidad de crear aplicaciones Web dinámicas.
24. Qué son los Servlets y dónde aplican. Estudiaremos los componentes Web Java que nos permitirán procesar una petición HTTP, utilizando Apache Tomcat como servidor Web Java.
25. Proceso de Petición / Respuesta HTTP. Aprenderemos a procesar una petición Web, y veremos como mostrar de vuelta la respuesta hacia el cliente desde nuestra aplicación Web Java utilizando Servlets.
26. Manejo de Sesiones. Estudiaremos el concepto de las Sesiones HTTP y veremos cómo Java resuelve fácilmente el manejo de sesiones.
27. Qué son los JSPs y dónde aplican. Estudiaremos los componentes Web Java que nos permitirá desplegar más fácilmente la información HTML al usuario. Veremos las características, similitudes y diferencias entre los Servlets y los JSPs.
28. Despliegue de información con Expression Language (EL) y JSTL. Al utilizar JSPs existe la necesidad de simplificar el despliegue de información, para ello se utilizarán las tecnologías Expression Language (EL) y JSTL.
29. Patrón de Diseño MVC. Estudiaremos como integrar los componentes de los Servlets y JSPs y la información de nuestro sistema, normalmente obtenida de una Base de Datos. Aplicaremos las mejores prácticas y para ello estudiaremos el patrón de diseño MVC (Model - View - Controller).
30. Creación de una aplicación Java Web. Al finalizar nuestro curso, crearemos una aplicación Web aplicando las mejores prácticas e integrando TODOS los temas vistos en este taller, incluyendo conexión a Bases de Datos, manejo de seguridad, mejores prácticas y patrones de diseño.
31. En el laboratorio final aplicaremos una arquitectura multicapas con el objetivo de que esta aplicación sirva de base para tus proyecto Java Web aplicando estas tecnologías.




Ejercicio Java en Netbeans Botones de Opción

1. Realiza un nuevo proyecto.
2. En la ventana principal debes añadir lo siguiente:
a. Un botón “Aceptar” llamado btnAceptar.
b. Una etiqueta con borde llamada etiResultado.
3. Añade un panel. Un panel es una zona rectangular que puede contener elementos (botones, etiquetas, etc) La forma de poner un panel es a través del objeto JPanel.

4.Una vez añadido el panel en el JFrame, le pondremos un borde para poder localizarlo fácilmente. Debes hacer lo siguiente:
a.Selecciona el panel que has añadido.
b.Activa la propiedad Border (botón con tres puntos)
c.Busca el tipo de borde llamado TitledBorder (borde con título) y pon el título colores.

5.Tu ventana debe quedar más o menos así:

6.Ahora debes añadir tres botones de opción (botones de radio) dentro del panel. Estos botones son objetos del tipo JRadioButton.

7.Añade tres JRadioButton y cambia el texto de ellos, de forma que aparezca “Rojo”, “Verde” y “Azul”.
8.Debe cambiar el nombre de cada uno de ellos. Se llamarán: optRojo, optVerde, optAzul.
9.La ventana tendrá el siguiente aspecto cuando termine:

10. Si ejecuta el programa, observará que pueden seleccionarse varios colores a la vez. Esto no es interesante, ya que los botones de opción se usan para activar solo una opción entre varias.
11. Hay que hacer que solo un botón de opción pueda estar seleccionado a la vez. Para ello, debe añadir un nuevo objeto. Realice los siguientes pasos:
a.Añada un objeto del tipo ButtonGroup al formulario. ¡Atención! Este objeto es invisible, y no se verá en el
formulario, sin embargo, lo podréis ver en el Inspector, en la parte de “Otros Componentes”:



b.Tienes que darle un nombre al ButtonGroup. El nombre será “grupoColores”.
c.Ahora, hay que conseguir que los tres botones pertenezcan al mismo grupo. Es decir, que pertenezcan al grupo grupoColores.
d.Selecciona el botón de opción optRojo y cambia su propiedad buttonGroup, indicando que pertenece al grupo colores (observa la imagen):

e. Haz lo mismo con los botones optVerde y optAzul.
12.Acabas de asociar los tres botones de opción a un mismo grupo. Esto produce que solo una de las tres opciones pueda estar activada. Pruébelo ejecutando el programa.
13.Ahora interesa que la opción “Rojo” salga activada desde el principio. Una forma de hacer esto es programando en el
“Constructor” lo siguiente:
optRojo.setSelected(true);
El método setSelected hace que se pueda activar o desactivar un botón de opción.
Prueba el programa. Observa como la opción Rojo está activada inicialmente.
14.El programa no está terminado aún. Interesa que cuando el usuario pulse el botón Aceptar, en la etiqueta aparezca el color elegido. Para ello, en el actionPerformed del botón Aceptar programe lo siguiente:

 String mensaje="Color elegido: ";
        
        if (optRojo.isSelected()) {
            mensaje=mensaje+"Rojo";
        } else if (optVerde.isSelected()) {
            mensaje=mensaje+"Verde";
        } else if (optAzul.isSelected()) {
            mensaje=mensaje+"Azul";
        }
       
         etiResultado.setText(mensaje);

 15.Observa el código. En él se hace lo siguiente:
a.Se crea una variable de cadena llamada mensaje. 
b.En esa variable se introduce el texto “Color elegido:  “
c.Luego se comprueba que opción está seleccionada, usando el método isSelected de los botones de opción.
Este método te dice si un botón está seleccionado o no.
d.Según la opción que esté seleccionada, se añade un texto u otro a la cadena mensaje.
e.Finalmente se muestra la cadena mensaje en la etiqueta etiResultado.
16.Ejecute el programa. Seleccione por ejemplo la Verde. Al pulsar Aceptar el resultado debe ser el siguiente:


CONCLUSIÓN
Los botones de opción, también llamados botones de radio (JRadioButton) se usan cuando quieres que el usuario pueda elegir una opción de entre varias.
Es interesante que los botones de radio aparezcan dentro de un panel JPanel. Se recomienda colocar un borde al panel.
Es totalmente necesario añadir un objeto del tipo ButtonGroup, y hacer que los botones de radio pertenezcan a dicho grupo. En caso contrario, será posible activar varios botones de opción a la vez.

Puedes descargar por dropbox  Aquí