You are on page 1of 7

3.

4 CREACIN DE COMPONENTES (VISUALES Y NO VISUALES) DEFINIDO POR EL USUARIO


COMPONENTES VISUALES Y NO VISUALES
Se puede establecer muchas clasificaciones para los componentes. Una de ellas es la de visuales o controles, frente a no visuales. Un componente es visual cuando tiene una representacin grfica en tiempo de diseo y ejecucin (botones, barras de scroll, cuadros de edicin, etc.), y se dice no visual en caso contrario (temporizadores, cuadros de dilogo-no visibles en la fase de diseo, etc). Por lo dems no existen ms diferencias entre ellos, excepto, claro est, las derivadas de la visualizacin del componente. Los componentes no visuales se pueden colocar en los formularios de la misma manera que los controles, aunque en este caso su posicin es irrelevante. Para empezar, los componentes visuales podemos dividirlos a su vez en dos tipos: -Componentes interactivos: permiten que el usuario final los manipule, ya sea introduciendo datos, seleccionado elementos, etc. De forma que estos componentes pueden recibir el foco (con SetFocus) as como los eventos propios del teclado y del ratn. Normalmente, el propio sistema operativo es el encargado de dibujar el aspecto del componente, haciendo el componente las llamadas correspondientes para que este aspecto cambie. -Componente grficos: el propio componente es el encargado de dibujar en la pantalla lo que crea oportuno, bien a travs de las funciones bsicas del API de Windows (con el objeto TCanvas) o bien a travs de otras libreras grficas, como OpenGL, DirectX, etc. Estos componentes, no suelen recibir eventos del usuario final, aunque si eventos del propio programador, ya que su cometido no suele ir ms all de mostrar ciertos grficos o imgenes en la pantalla. Si tuviramos que crear un componente interactivo desde el principio, sera demasiado complejo, ya que tendramos que luchar encontrar el propio API del sistema operativo, gestionando sus mensajes, las llamadas las funciones a bajo nivel, etc. Sin embargo, podemos aprovechar la mayora del trabajo hecho por Borland en la VCL, y crear componentes interactivos a partir de otros ya existentes, aplicado la tcnica de herencia. Dado que un componente es un objeto como otro cualquiera, podremos aplicar en el todas las tcnicas de la orientacin a objetos: encapsulacin, herencia y polimorfismo. La encapsulacin ya la hemos utilizado sin apenas darnos cuenta, simplemente definiendo ciertos atributos como privados, para que no puedan ser accedidos desde fuera de la clase, y otros pblicos o publicados (pulished) para ser usados por el programador que utilice el componente. La herencia nos permite reutilizar cdigo, haciendo que una clase dada (que llamaremos clase hija) adquirida a todos los atributos y mtodos pblicos y protegidos de otra, llamada clase padre. De este mtodo, podemos aprovechar mucho cdigo escrito, simplemente heredando de una clase ya escrita. Por si fuera poco, tambin es posible que una clase hijo tenga a su vez mas descendencia, adquiriendo estos las caractersticas del padre y del "padre del padre", es decir: del abuelo.

La tcnica de la herencia, aplicada a los componentes, nos permite personalizar cualquier componente, o porque queremos ampliar las posibilidades del componente. La propia VCL utiliza la herencia continuamente, bien para utilizar cdigo de clases padre, o bien para ofrecernos clases padre de las que nosotros podemos heredar. Muchas "suites de componentes" hacen tambin esto, proporcionando un componente heredando a partir de cada uno de los bsicos, y aadiendo en estas nuevas caractersticas. Para explicar cmo crear un componente interactivo, vamos a hacerlo a travs de un ejemplo prctico: supongamos que necesitamos mostrar un rbol que muestre los directorios a partir de una carpeta dada, incluso pongamos que necesitamos mostrar el tpico rbol de "MI PC", mostrando todas las unidades y las carpetas de cada una. Para ello, podramos escribir un componente desde cero, gestionando todo lo referente a la estructura en rbol, el dibujo en pantalla, la gestin de mensajes,etc. Podramos utilizar la herencia para utilizar el cdigo ya escrito, concretamente basndose en el componente ATTreeVienw, que es el que nos permite mostrar en un formulario estructuras del tipo rbol. Sin embargo, el TTreeVienw que viene por defecto en el Delphi, es muy genrico, y sirve para mostrar cualquier ripo de rbol. Nuestro caso es mas especfico: necesitamos mostrar un rbol, s, pero ms concretamente un rbol de directorios. Llamaremos a nuestra nueva creacin TArbolDirectorios. Slo vamos a fijarnos a partir TComponent: TComponent: este nos resulta familiar, ya que es la clase a partir de la que hemos creado en nuestro conversor de monedas de anteriores nmeros. Los componentes no-visuales deben heredar directamente de TComponent, ya que este proporciona las caractersticas bsicas. TControl: se trata de la clase padre para todos los componentes visuales, ya sean grficos o no. TWinControl: de esta clase descendern todos los componentes dibujados directamente por Windows. La principal caracterstica de estos objetos (llamados ventanas o Windows) es que estn identificados por un nmero nico llamado descriptor o manejadores de ventana (en ingls handle). TCustomTreeView: se trata de la clase que permite mostrar un rbol dentro de un formulario de Delphi. La peculiaridad es que esta clase no contiene ningn mtodo ni propiedad en la seccin published, por lo que puedes ser manejada desde el entorno de Delphi. TTreeView: esta ya es la clase o componente final, que aparece registrado en la paleta de componentes, y que puede ser configurado en tiempo de diseo. En realidad, todo el trabajo de esta clase se limita a publicar las propiedades y eventos que han sido programados en la clase TCustomTreeVienw. Ahora que ya sabemos quen va a ser el padre de nuestro componente, tenemos que decir qu propiedades y eventos vamos a proporcionar a nuestros usuarios del componente. CarpetaRaiz: se trata de una cadena que contendr la carpeta a partir de que se crear el rbol de directorios. Puede ser la carpeta raz de una unidad de disco(p.e."C:\") para mostrar los directorios de toda la unidad, o bien una carpeta cualquiera , para mostrar las subcarpetas de esta. Un caso se dar cuando esta propiedad contenga el valor "Mi PC", con en el que mostraremos cada una de las unidades disponibles en nuestro sistemas, pudiendo expandir estas unidades para mostrar sus carpetas. CarpetaActual: es el valor de tipo cadena que contiene la ruta de la carpeta seleccionada en el rbol, por ejemplo. Si, por ejemplo, tenemos seleccionada la carpeta de primer nivel "Datos", y el nodo raz es "C:\Temporal", esta propiedad contendr el valor "C:\Temporal\Datos". Tambin se puede modificar su valor, seleccionndose en ese caso el modo correspondiente en el rbol (si el valor establecido es correcto).

MostarPadre: es un valor booleano (true o false) que nos permite configurar la aparicin no del nodo padre. Es decir: si en la propiedad "CarpetaRaiz" hemos introducido el valor "C:\Delphi", en el rbol aparecer un nodo raz llamado "Delphi", y colgado de l, todas las dems subcarpetas. Si establecemos esta propiedad a falso, el nodo raz desaparecer, mostrndose todas las subcarpetas en un primer nivel, sin colgar de ningn nodo padre. Una interfaz grafica est construida en base a elementos grficos bsicos, los componentes.Tpicos ejemplos de estos componentes son los botones, barras de desplazamientos, etiquetas, listas, cajas de seleccin o campos de textos. Los componentes permiten al usuario a interactuar con la aplicacin y proporcionar informacin desde el programa al usuario sobre el estado del programa. En el AWT, todos los componentes de la interfaz de usuario son instancias de la clase componente o uno de sus subtipos. Los componentes no se encuentran aislados, si no agrupados dentros de contenedores. Los contenedores contienen y organizan la situacin de los componentes y como tales pueden ser situados dentro de otros contenedores. Tambin contienen el cdigo necesario para el control de eventos, cambiar la forma del cursor o modificar el icono de la aplicacin. En el AWT todos los contenedores son instancias de la clase Container o uno de sus subtipos. La clase componente es una clase abstracta que representa todo lo que tiene una posicin, un tamao, puede ser pintado en pantalla y puede recibir eventos. No tiene constructores pblicos, ni puede ser instanciada. Sin embargo, la clase Component puede ser extendida para proporcionar una nueva caracterstica incorporada a java, conocida como componentes ligeros o Lightweight. Los objetos derivados de la clase Component que se incluyen en el abstract window Toolkit son los que aparecen a continuacin:

Button Canvas Checkbox Choice Container Panel Window Dialog Frame

Label List Scrollbar TextComponent TextArea TextField

Sobre estos componentes se podrn hacer mas agrupaciones y quiz la ms significativa fuese la que diferencie a los componentes segn el tipo de entrada. A si habra componentes con entrada de tipo no-textual como los botones de pulsacin (Button), las listas (List), botones de marcacin (checkbox), botones de seleccion (Choice), y botones de comprobacin (CheckboxGroup); componentes de entrada y salida textual como los campos de texto (TextField), las reas de texto (TextArea) y las etiquetas (Label); y, otros componentes sin acomodo fijo en ningn lado, en donde se encontraran componentes como las barras de desplazamiento(Scrollbar), zonas de dibujo (Canvas) e incluso los contenedores (Panel, Window, Dialog y Frame), que tambin pueden considerarse como componentes.

La clase Button es aquella que produce un componente de tipo boton con un titulo.El constructor mas utilizado es el que permite pasarle como parametro una cadena, que sera la que aparezca como titulo e identificador del boton en la interfaz de usuario. Botones de seleccin Los botones de seleccin (Choice) permiten el rpido acceso a una lista de elementos, presentndose como titulo en el item que se encuentre seleccionado. La clase choice extiende la clase component e implementa la interfaz ItemSelectable, que es aquella que mantiene un conjunto de items en los que puede haber, o no, alguno seleccionado. Botones de comprobacin La clase CheckBox extiende la clase Componet e implementa la interfazItemSelectable, que es aquella que contiene un conjunto de tems entre los que puede haber o no alguna seleccionado. Los botones de comprobacin (Checkbox) se puede agrupar para formar una interfaz de botn de radio (CheckboxGroup),que son agrupaciones de botones de comprobacin de exclusin mltiple es decir, en la que siempre hay un nico botn activo.

PROGRAMA: import java.awt.*; import java.awt.event.*; import java.util.*;

public class Java1403{ public static void main( String args[] ){ //Se instancia un objeto Interfaz Hombre-Mquina IHM ihm = new IHM(); } }

// Clase de la Interfaz grfica Class IHM { // Constructor de la clase public IHM() {

// Se crea un objeto CheckboxGroup CheckboxGroup miCheckboxGroup = new CheckboxGroup();

//Ahora se crea un objeto Button y se registra un objeto //ActionListener sobre l Button miBoton = new Button( "Aceptar" ); miBotton.addActionListener( new MiActionListener ( miCheckboxGroup ) );

// Se crea un objeto Frame para contener los objetos Checkbox y el // objeto Button. Se fija un Flowlayout, se incorporan a l los // objetos, se fija el tamao y se hace visible Frame miFrame = new Frame ( " Tutorial de Java, AWT " ); miFrame.setLayout( new FlowLayout() ); miFrame.add( new Checkbox( "A", true,miCheckboxGroup ) ); miFrame.add( new Checkbox( "B", false,miCheckboxGroup ) ); miFrame.add( new Checkbox( "C", false,miCheckboxGroup ) ); miFrame.add( new Checkbox( "D", false,miCheckboxGroup ) ); miFrame.add( miBoton ); miFrame.setSize( 250,100 ); miFrame.setVisible( true );

//Instanciamos y registramos un receptor para terminar la //ejecucin de la aplicacin, cuando el usuario cierre la //ventana miFrame.addWindowListener( new Conclusion() );

} }

// Esta clase indica la caja de seleccin que esta seleccionada // cuando se pulsa el botn de Aceptar class MiActionListener implements ActionListener { CheckboxGroup oCheckBoxGroup;

MiActionListener( CheckboxGroup checkBGroup ) { oCheckBoxGroup = checkBGroup; } public void actionPerformed( ActionEvent evt ) { System .out.println( oCheckBoxGroup.getSelectedCheckbox().getName()+ " " + oCheckBoxGroup.getSelectedCheckBox().getLabel () ); } }

//Concluye la aplicacin cuando el usuario cierra la ventana class Conclusion extends WindowAdapter { public void windowClosing( WindowEvent evt ) { System.exit( 0 ); } }

BIBLIOGRAFIA http://www.sjover.com/jm/prog/delphi/componentes_3.html

You might also like