Anda di halaman 1dari 5

JTabbedPane Personalizado Por: Nery Chucuy

http://www.idesisnery.blogspot.com

JTabbedPane 
Personalizado
JTabbedPane Personalizado Por: Nery Chucuy
http://www.idesisnery.blogspot.com

Contenido

Introduccion
Funcionamiento
Configuración
Ventana.class
Pestana.class
JTabbedPane Personalizado Por: Nery Chucuy
http://www.idesisnery.blogspot.com

Introducción [contenido]

Bueno, el motivo de esta pequeña guía es explicar las características principales del
personalizar un JTabbedPane del API java.swing; ya que traté de documentar el código de forma
detallada, aquí solo indicaré la lógica de operación. Principalmente personalizaremos las
pestañas de cada ficha en el panel, para que nuestras aplicaciones se vean más profesionales y
sean mucho más funcionales. Lo que haremos es agregar un icono y un botón para cerrarlas,
pero con los conceptos obtenidos con este ejemplo, podrás agregar los componentes que tu
desees a las pestañas. Además haremos que cuando las fichas sean demasiadas, no sigan
apareciendo bajo las anteriores sino aparezcan los botones de desplazamiento horizontal ;). 

Figura 1. Así luce.

Nota: El ejemplo adjunto fue desarrollado en NetBeans 5.5

Funcionamiento [contenido]

La forma en que lograremos lo propuesto será adentrándonos un poquito en la clase


JTabbedPane. Esta clase posee el método setTabComponentAt(int index, Componet component) ,
el cual se encarga de establecer el componente usado para las pestañas de las fichas [1].
También crearemos una clase que extienda de JPanel para agregar a este los objetos que
queramos mostrar en la pestaña, luego como un JPanel es un Component entonces podremos
configurarlo como pestaña de las fichas. Para colocar los botones de desplazamiento horizontal,
solo modificaremos una propiedad del JTabedPane.

[1] Este método cambia el atributo component que encapsula la clase privada Page contenida en
la clase JTabbedPane. Como ha de suponerse, dicho atributo es el componente mostrado en la
pestaña.
JTabbedPane Personalizado Por: Nery Chucuy
http://www.idesisnery.blogspot.com

Configuración [contenido]
Ventana.class [contenido]
En esta clase se encapsula el JFrame principal, que contiene un JTabbedPane así como una
barra de menú. Las opciones del menú son: Agregar ficha, Reset, About, Salir.

Figura 2. El menú.

La acción del ítem Agregar ficha va de la siguiente manera:

(1) tabbedPrincipal.addTab("Nuevo ", new JPanel());
(2) tabbedPrincipal
.setSelectedIndex(tabbedPrincipal.getTabCount()­1);
(3)  Pestana pestana = new Pestana(this.getTabbedPrincipal());
     tabbedPrincipal
(4) .setTabComponentAt(tabbedPrincipal.getTabCount()­1,pestana);

En (1) agregamos una ficha al JTabbedPane, en este caso agregamos solo un JPanel, pero podría
ser cualquier componente, que contenga un TextArea o lo que necesites en cada ficha para tu
aplicación.

En (2) hacemos que la última ficha agregada sea la seleccionada, mostrando así su contenido.

Un nuevo objeto Pestana es creado en (3), como parámetro recibe un JTabbedPane; el método
getTabbedPrincipal() retorna el JTabbedPane usado en la aplicación:

public JTabbedPane getTabbedPrincipal()
{
return this.tabbedPrincipal;
}

tabbedPrincipal es el nombre del JTabbedPane utilizado en este ejemplo.

Lo que hacemos con esto es pasar la referencia del JTabbedPane al objeto Pestana, para que éste
pueda acceder a las propiedades del componente, como el índice de ficha al que fue agregado,
etc.

En (4) agregamos el objeto tipo Pestana creado en (3) a la ficha agregada, osea la última.
JTabbedPane Personalizado Por: Nery Chucuy
http://www.idesisnery.blogspot.com

Pestana.class [contenido]
El constructor de ésta clase recibe como parámetro un JTabbedPane, que debe ser el
componente al que está siendo agregado la ficha que encabezará esta pestaña. Dicho
JTabbedPane se toma como referencia[2] en ésta clase (o sea tomamos el apuntador al objeto ;)
para poder utilizarlo en el evento del botón de cerrar pestaña (X).

He aquí la acción del botón cerrar (X):

(1) int i = panelContenedor.indexOfTabComponent(this);
(2)   if (i != ­1) 
(3)        panelContenedor.remove(i);

panelContenedor es el nombre del parámetro que contiene la referencia al JTabbedPane que se


pasa como parámetro en el constructor de la clase; ahora vemos por qué era necesario hacer
esto.

En (1) obtenemos el índice de la ficha que es encabezada por la pestaña actual (this).

En (2) nos aseguramos que el índice este correcto.

Y por último en (3) removemos del JTabbedPane principal, la ficha que elegimos cerrar. Recuerda
que panelContenedor apunta al JTabbedPane que se encuentra en el Frame por eso es allí donde
se realizan las acciones que hagamos sobre panelContenedor.

Eso es todo!  Recuerda que el código fuente está documento, allí podrás encontrar los detalles de todo 
el código.

Tus comentarios son muy importantes. 

Nery Chucuy
idesisnery@yahoo.com
http://www.idesisnery.blogspot.com

Anda mungkin juga menyukai