<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2spanishfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>{ Apuntes JAVA } - Programación Orientada a Objetos</title>
	
	<link>http://www.apuntesjava.com</link>
	<description>Aprende Java desde Cero, la mejor de las guías la encontraras aqui...</description>
	<lastBuildDate>Sat, 08 Dec 2012 23:24:39 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ApuntesJava" /><feedburner:info uri="apuntesjava" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-sa/2.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId>ApuntesJava</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=es&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FApuntesJava" src="http://eur.i1.yimg.com/eur.yimg.com/i/es/my/addto1.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.feedness.com/alta/http://feeds.feedburner.com/ApuntesJava" src="http://www.feedness.com/ayuda/wp-content/square_b_sh_feed.gif">Subscribe with Feedness</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FApuntesJava" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/ApuntesJava" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FApuntesJava" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FApuntesJava" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FApuntesJava" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FApuntesJava" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FApuntesJava" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FApuntesJava" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FApuntesJava" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FApuntesJava" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FApuntesJava" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FApuntesJava" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FApuntesJava" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2FApuntesJava" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>Tablero de Ajedrez y Posicion del Peon {JAVA}</title>
		<link>http://feedproxy.google.com/~r/ApuntesJava/~3/lfOkiHBh0eg/</link>
		<comments>http://www.apuntesjava.com/tablero-de-ajedrez-y-posicion-del-peon-java/#comments</comments>
		<pubDate>Thu, 27 Sep 2012 01:30:44 +0000</pubDate>
		<dc:creator>Carlos Meza</dc:creator>
				<category><![CDATA[Ejercicios Java]]></category>
		<category><![CDATA[ajedrez]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[peon]]></category>

		<guid isPermaLink="false">http://www.apuntesjava.com/?p=217</guid>
		<description><![CDATA[

Tablero de Ajedrez y Posición del Peón {JAVA}



DESCRIPCIÓN


Hola, continuando con los ejercicios les dejo un simple ejemplo de como pintar por consola un Tablero de Ajedrez y como valor agregado tambien pintaremos la posicion de un Peon incluyendo la trayectoria que puede recorrer dentro del tablero.
Primero empecemos sabiendo que el peon solo en su primer movimiento puede moverse dos casilleros hacia adelante (verticalmente), de ...]]></description>
				<content:encoded><![CDATA[<fieldset>
<div>
<h2>Tablero de Ajedrez y Posición del Peón {JAVA}</h2>
</div>
</fieldset>
<fieldset>
<legend><strong>DESCRIPCIÓN</strong></legend>
<div>
<div style="text-align: center;">
<p style="text-align: left;">Hola, continuando con los ejercicios les dejo un simple ejemplo de como pintar por consola un Tablero de Ajedrez y como valor agregado tambien pintaremos la posicion de un Peon incluyendo la trayectoria que puede recorrer dentro del tablero.</p>
<p style="text-align: left;">Primero empecemos sabiendo que el peon solo en su primer movimiento puede moverse dos casilleros hacia adelante (verticalmente), de ahi el resto de movimientos solo se moverá un casillero.</p>
<p style="text-align: left;">Como segundo punto el Peon solo puede comer en forma diagonal. Una imagen vale mas que mil palabras:</p>
<p style="text-align: left;"><span style="font-family: trebuchet ms;"><br />
</span></p>
</div>
</div>
</fieldset>
<fieldset>
<legend><strong><span style="font-family: 'trebuchet ms';">CAPTURA</span></strong></legend>
<div style="text-align: center;"><a href="http://www.apuntesjava.com/wp-content/uploads/2012/09/Chess_fork_pawn_chessbase.png"><img title="Chess_fork_pawn_chessbase" src="http://www.apuntesjava.com/wp-content/uploads/2012/09/Chess_fork_pawn_chessbase-300x300.png" alt="Chess fork pawn chessbase 300x300 Tablero de Ajedrez y Posicion del Peon {JAVA}" width="300" height="300" /></a></div>
</fieldset>
<fieldset>
<legend><strong><span style="font-family: 'trebuchet ms';">SUMARIO DEL </span><span style="font-family: 'trebuchet ms';">CÓDIGO</span></strong></legend>
<div>
<div style="text-align: center;">
<p>Empecemos: Para poder indicar una posicion en el tablero con la cual vamos a trabajar simplemente debemos jugar con sumas, restas e igualaciones.</p>
<p>Sumario del Codigo:</p>
<ul>
<li style="text-align: left;"><strong>X</strong> = Posicion Fija del Peon (Horizontal)</li>
<li style="text-align: left;"><strong>Y</strong> = Posicion Fija del Peon (Vertical)</li>
<li style="text-align: left;"><strong>i</strong> = Posicion en Tablero (Horizontal)</li>
<li style="text-align: left;"><strong>j</strong> = Posicion en Tablero (Vertical)</li>
</ul>
<div style="text-align: left;">Sumario del Resultado por consola:</div>
<div>
<ul>
<li style="text-align: left;"><strong>B</strong> = Casilla Blanca del Tablero</li>
<li style="text-align: left;"><strong>N</strong> = Casilla Negra del Tablero</li>
<li style="text-align: left;"><strong>*</strong> = Rango o Dominio del Peon (Movimiento)</li>
<li style="text-align: left;"><strong>X</strong> = Posicion que puede comer el Peon</li>
</ul>
</div>
</div>
</div>
</fieldset>
<fieldset>
<legend><strong><span style="font-family: 'trebuchet ms';">PRIMER CÓDIGO DE EJEMPLO</span></strong></legend>
<div style="text-align: justify;">
<p>En este primer ejemplo sencillamente jugaremos con restas y sumas, este primer ejemplo es mas sencillo y entendible:</p>
<pre class="brush: java; gutter: true">public class Ajedrez {
    // Imprimir un tablero de ajedrez.
    public static void main(String[] args) {
        int x, y; // posición inicial del peon
        int i, j;  // posición actual del peon
        x = 4; //Fila
        y = 3; //Columna
        System.out.println(&quot;Posición del Peon:&quot;); 
        System.out.println(&quot;-------------------------&quot;); 
        System.out.print(&quot; fila    &quot; + x); 
        System.out.println(); 
        System.out.print(&quot; columna &quot; + y); 
        System.out.println(); 
        System.out.println(&quot;-------------------------&quot;);    

        for (i = 1; i &lt;= 8; i++)
        {
          for (j = 1; j &lt;= 8; j++)
          {
            if ( i &gt;= (x-2)  &amp;&amp;  i &lt;= x  &amp;&amp;  j == y)
              System.out.print(&quot;* &quot;);
            else if ( (x-1) == i  &amp;&amp;  (y-1) == j  ||  (x-1) == i  &amp;&amp;  (y+1) ==j )
                System.out.print(&quot;X &quot;);
            else if ((i + j) % 2 == 0)
              System.out.print(&quot;B &quot;);
            else
              System.out.print(&quot;N &quot;);
          }
          System.out.println(); // cambiar de fila
        }
    }
}</pre>
</div>
</fieldset>
<fieldset>
<legend><strong><span style="font-family: 'trebuchet ms';">SEGUNDO CÓDIGO DE EJEMPLO</span></strong></legend>
<div>
<div style="text-align: left;">
<p style="text-align: left;">Ahora este es otro ejemplo que hace lo mismo pero tiene otro metodo de comparacion en la condicional:</p>
<pre class="brush: java; gutter: true">public class Ajedrez {
    // Imprimir un tablero de ajedrez.
    public static void main(String[] args) {
        int x, y; // posición inicial del peon
        int i, j;  // posición actual del peon
        x = 4; //Fila
        y = 3; //Columna
        System.out.println(&quot;Posición del Peon:&quot;); 
        System.out.println(&quot;-------------------------&quot;); 
        System.out.print(&quot; fila    &quot; + x); 
        System.out.println(); 
        System.out.print(&quot; columna &quot; + y); 
        System.out.println(); 
        System.out.println(&quot;-------------------------&quot;);    

        for (i = 1; i &lt;= 8; i++)
        {
          for (j = 1; j &lt;= 8; j++)
          {
            if ( i &gt;= (x-2)  &amp;&amp;  i &lt;= x  &amp;&amp;  j == y)
              System.out.print(&quot;* &quot;);
            else if ( (i-j) == 1  &amp;&amp;  (x+y) == (i+j)+2  ||  (i+j) == (x+y)  &amp;&amp;  (x-1) == i )
                System.out.print(&quot;X &quot;);
            else if ((i + j) % 2 == 0)
              System.out.print(&quot;B &quot;);
            else
              System.out.print(&quot;N &quot;);
          }
          System.out.println(); // cambiar de fila
        }
    }
}</pre>
</div>
</div>
</fieldset>
<fieldset>
<legend><strong>EXPLICACIÓN</strong></legend>
<div>
<div style="text-align: left;">
<p>En esta oportunidad tendremos que ingresar la posicion del alfil manualmente en:</p>
<ul>
<li>x = <strong>4</strong>;   //Posicion de Fila</li>
<li>y = <strong>3</strong>;   //Posicion de Columna</li>
</ul>
<p>Comparando los dos codigos la diferencia esta en la segunda condicion:</p>
<p>Primer Ejemplo:</p>
<pre class="brush: java; gutter: true">(x-1) == i  &amp;&amp;  (y-1) == j  ||  (x-1) == i  &amp;&amp;  (y+1) ==j</pre>
<p>Segundo Ejemplo:</p>
<pre class="brush: java; gutter: true">(i-j) == 1  &amp;&amp;  (x+y) == (i+j)+2  ||  (i+j) == (x+y)  &amp;&amp;  (x-1) == i</pre>
<p>Obviamente que el segundo ejemplo es mas complejo en esta condición.</p>
<p>En la programacion es indispensable buscar la mejor solucion a un problema, pero a la vez siempre tener conocimiento sobre otros metodos, rutas o soluciones&#8230;</p>
<p><span style="font-family: trebuchet ms;"><br />
</span></p>
</div>
</div>
</fieldset>
<fieldset>
<legend><strong><span style="font-family: 'trebuchet ms';">RESULTADO FINAL</span></strong></legend>
<div>
<div style="text-align: left;">
<p><span style="font-family: trebuchet ms;"><img class="aligncenter size-full wp-image-219" title="ajedrez_peon_java" src="http://www.apuntesjava.com/wp-content/uploads/2012/09/ajedrez_peon_java.png" alt="ajedrez peon java Tablero de Ajedrez y Posicion del Peon {JAVA}" width="221" height="239" /> </span></p>
</div>
</div>
</fieldset>
<p>&nbsp;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ApuntesJava?a=lfOkiHBh0eg:XzOqYsVzbAE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ApuntesJava?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.apuntesjava.com/tablero-de-ajedrez-y-posicion-del-peon-java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.apuntesjava.com/tablero-de-ajedrez-y-posicion-del-peon-java/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=tablero-de-ajedrez-y-posicion-del-peon-java</feedburner:origLink></item>
		<item>
		<title>Conversión de grados centígrados a fahrenheit JAVA</title>
		<link>http://feedproxy.google.com/~r/ApuntesJava/~3/ykTB6vFGYTM/</link>
		<comments>http://www.apuntesjava.com/conversion-de-grados-centigrados-a-fahrenheit-java/#comments</comments>
		<pubDate>Sun, 22 Jul 2012 02:35:56 +0000</pubDate>
		<dc:creator>Carlos Meza</dc:creator>
				<category><![CDATA[Ejercicios Java]]></category>
		<category><![CDATA[centigrados]]></category>
		<category><![CDATA[clases]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[encapsulacion]]></category>
		<category><![CDATA[fahrenheit]]></category>
		<category><![CDATA[grados]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.apuntesjava.com/?p=207</guid>
		<description><![CDATA[La relacion entre los grados centigrados y los grados fahrenheit viene dada por la expresion:
grados fahrenheit = 9/5 * grados centigrados +32
Los calculos los vamos a realizar para un intervalo de -30 a 100 grados centigrados con incremento de 6
Analicemos el problema. ¿De que trata el programa? De grados. Entonces podemos pensar en objetos &#8220;grados&#8221; que encapsulen un valor en ...]]></description>
				<content:encoded><![CDATA[<p>La relacion entre los <strong>grados centigrados</strong> y los<strong> grados fahrenheit</strong> viene dada por la expresion:</p>
<blockquote><p><span style="color: #993300;"><strong>grados fahrenheit = 9/5 * grados centigrados +32</strong></span></p></blockquote>
<p>Los calculos los vamos a realizar para un intervalo de -30 a 100 grados centigrados con incremento de 6</p>
<p>Analicemos el problema. <em><strong>¿De que trata el programa?</strong></em> De grados. Entonces podemos pensar en objetos <span style="color: #993300;"><strong>&#8220;grados</strong></span>&#8221; que encapsulen un valor en grados centigrados y los metodos necesarios para asignar al objeto un valor en grados centigrados, asi como para obtener tanto el dato grados centigrados como su equivalencia en grados fahrenheit. En base a esto, podriamos escribir una <em><strong>clase CGrados</strong> </em>como se puede observar a continuacion:</p>
<pre class="brush: java; gutter: true">class CGrados
{
  private float gradosC; // grados centígrados
  
  public void CentígradosAsignar(float gC)
  {
    // Establecer el atributo grados centígrados
    gradosC = gC;
  }
  
  public float FahrenheitObtener()
  {
    // Retornar los grados fahrenheit equivalentes a gradosC
    return 9F/5F * gradosC + 32;
  }
  
  public float CentígradosObtener()
  {
    return gradosC; // retornar los grados centígrados
  }
}</pre>
<p>El codigo anterior muestra que un objeto de la clase CGrados tendra una estructura interna formada por el atributo:</p>
<ul>
<li><strong>gradosC</strong>, grados centigrados</li>
</ul>
<p>y una interfaz de acceso formada por los metodos:</p>
<ul>
<li><strong>CentigradosAsignar</strong> que permite asignar a un objeto un valor en grados centigrados</li>
<li><strong>FahrenheitObtener</strong> que permite retornar el valor en grados fahrenheit equivalente a gradosC grados centigrados.</li>
<li><strong>CentigradosObtener</strong> que permite retornar el valor almacenado en el atributo gradosC.</li>
</ul>
<p>Entonces <em><strong>¿Que tiene que hacer el objeto aplicacion?</strong></em> Pues, visializar cuantos grados fahrenheit son -30C, -26C, &#8230;,<em> n grados centigrados</em>, &#8230;, 96C y <em><strong>¿Como hacer esto?</strong></em>. Enviando al objeto CGrados los mensajes <strong>CentigradosAsignar y FahrenheitObtener</strong> una ves para cada valor desde -30 a 100 grados centigrados con incrementos de 6.</p>
<p>Seguidamente veremos la <em><strong>clase de Aplicacion que llamara a un objeto de la clase CGrados</strong></em></p>
<pre class="brush: java; gutter: true">import java.lang.System;   // importar la clase System

public class CApGrados
{
  // Definición de constantes</pre>
<pre class="brush: java; gutter: true">  final static int limInferior = -30;</pre>
<pre class="brush: java; gutter: true">  final static int limSuperior = 100;
  final static int incremento = 6;

  public static void main(String[] args)
  {
    // Declaración de variables
    CGrados grados = new CGrados();
    int gradosCent = limInferior;
    float gradosFahr = 0;

    while (gradosCent &lt;= limSuperior) // while ... hacer:
    {
      // Asignar al objeto grados el valor en grados centígrados
      grados.CentígradosAsignar(gradosCent);
      // Obtener del objeto grados los grados fahrenheit
      gradosFahr = grados.FahrenheitObtener();
      // Escribir la siguiente línea de la tabla
      System.out.println(gradosCent + &quot; C&quot; + &quot;\t&quot; + gradosFahr + &quot; F&quot;);
      // Siguiente valor
      gradosCent += incremento;
    }
  }
}</pre>
<p>Ahora seguramente pensaran que todo el proceso se podria haver hecho utilizando solamente el objeto aplicaion, escribiendo todo el codigo en el metodo <span style="color: #993300;"><strong>main,</strong></span> lo cual es cierto.</p>
<p>Pero, lo que se pretende es que se pueda ver la forma clara que, en general, un programa Java es un conjunto de objetos que se comunican entre si mediante mensajes con el fin de obtener el resultado perseguido, y que la solucion del problema puede resultar mas sencilla cuando consiga realizar una presentacion del problema en base a los objetos naturales que se deducen de su enunciado.</p>
<p>piense que el realidad se enfrentara a los problemas mucho mas complejos y, por lo tantom la descomposición en objetos sera vital para resolverlos.</p>
<p>Seguidamente dejo el código completo con algunos comentarios para que se guíen <em><strong>(por supuesto son dos clases)</strong></em></p>
<pre class="brush: java; gutter: true">/**
 * Conversión de grados centígrados a fahrenheit:
 * F = 9/5 * C + 32
 */

import java.lang.System;   // importar la clase System

public class CApGrados
{
  // Definición de constantes
  final static int limInferior = -30;
  final static int limSuperior = 100;
  final static int incremento = 6;

  public static void main(String[] args)
  {
    // Declaración de variables
    CGrados grados = new CGrados();
    int gradosCent = limInferior;
    float gradosFahr = 0;

    while (gradosCent &lt;= limSuperior) // while ... hacer:
    {
      // Asignar al objeto grados el valor en grados centígrados
      grados.CentígradosAsignar(gradosCent);
      // Obtener del objeto grados los grados fahrenheit
      gradosFahr = grados.FahrenheitObtener();
      // Escribir la siguiente línea de la tabla
      System.out.println(gradosCent + &quot; C&quot; + &quot;\t&quot; + gradosFahr + &quot; F&quot;);
      // Siguiente valor
      gradosCent += incremento;
    }
  }
}




/**
 * Clase CGrados. Un objeto de esta clase almacena un valor
 * en grados centígrados.
 * Atributos:
 *   gradosC
 * Métodos:
 *   CentígradosAsignar, FahrenheitObtener y CentígradosObtener
 */
class CGrados
{
  private float gradosC; // grados centígrados
  
  public void CentígradosAsignar(float gC)
  {
    // Establecer el atributo grados centígrados
    gradosC = gC;
  }
  
  public float FahrenheitObtener()
  {
    // Retornar los grados fahrenheit equivalentes a gradosC
    return 9F/5F * gradosC + 32;
  }
  
  public float CentígradosObtener()
  {
    return gradosC; // retornar los grados centígrados
  }
}</pre>
<p><em><strong>Resumiendo tanto palabreo se puede decir que la programacion orientada a objetos es la forma o metodo de simplificar bloques de codigo y evitar la rebundancia en algun otro lugar del codigo. Y eso  es lo que tratamos de difundir y propagar <img src='http://www.apuntesjava.com/wp-includes/images/smilies/icon_smile.gif' alt="icon smile Conversión de grados centígrados a fahrenheit JAVA" class='wp-smiley' title="Conversión de grados centígrados a fahrenheit JAVA" /> </strong></em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ApuntesJava?a=ykTB6vFGYTM:ByhlU8ZIuqQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ApuntesJava?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.apuntesjava.com/conversion-de-grados-centigrados-a-fahrenheit-java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.apuntesjava.com/conversion-de-grados-centigrados-a-fahrenheit-java/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=conversion-de-grados-centigrados-a-fahrenheit-java</feedburner:origLink></item>
		<item>
		<title>Ejercicio de Ecuación con Clases</title>
		<link>http://feedproxy.google.com/~r/ApuntesJava/~3/bLGcg4gM8OE/</link>
		<comments>http://www.apuntesjava.com/ejercicio-de-ecuacion-con-clases/#comments</comments>
		<pubDate>Thu, 19 Jul 2012 06:06:27 +0000</pubDate>
		<dc:creator>Carlos Meza</dc:creator>
				<category><![CDATA[Ejercicios Java]]></category>
		<category><![CDATA[clases]]></category>
		<category><![CDATA[ecuacion]]></category>
		<category><![CDATA[ejercicio]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[metodos]]></category>

		<guid isPermaLink="false">http://www.apuntesjava.com/?p=203</guid>
		<description><![CDATA[La siguiente aplicacion utiliza objetos de una clase. CEcuacion para evaluar ecuaciones de la forma
ax³ + bx² + cx + d
Una ecuación se puede ver como un objeto que devuelve el exponente, los coeficientes y los métodos que permitan manipularla. Para hacer sencillo el ejemplo que tratamos de exponer, el exponente lo supondremos fijo de valor 3, los coeficientes serán variables, y añadiremos dos métodos: uno que permita evaluarla para un valor ...]]></description>
				<content:encoded><![CDATA[<p>La siguiente aplicacion utiliza objetos de una clase. CEcuacion para evaluar ecuaciones de la forma</p>
<p><strong>ax³ + bx² + cx + d</strong></p>
<p>Una ecuación se puede ver como un objeto que devuelve el exponente, los coeficientes y los métodos que permitan manipularla. Para hacer sencillo el ejemplo que tratamos de exponer, el exponente lo supondremos fijo de valor 3, los coeficientes serán variables, y añadiremos dos métodos: uno que permita evaluarla para un valor de <strong>X</strong> dado. Resumiendo, los objetos<strong> CEcuacion</strong> tendran unos tributos que seran los coeficientes y unos metodos <strong>Ecuacion</strong> y <strong>ValorPara</strong> para manipularlo.</p>
<p><strong>El </strong><strong>método</strong> <strong>Ecuación</strong> simplemente asignara los valores pasados como parametros a los atributos respectivos de los coeficientes de la ecuacion.</p>
<p><strong>El método ValorPara</strong> evaluara la ecuación para el valor x pasado como parametro. Este metodo, utilizando la sentencia return, devolvera como resultado el valor calculado <em>(Tipo Double)</em></p>
<p>Empecemos por la Clase <strong>CEcuacion</strong></p>
<pre class="brush: java; gutter: true">class CEcuacion
{
    // El termino de mayor grado tiene exponente 3 fijo
    double c3, c2, c1, c0; // coeficientes
    public void Ecuación(double a, double b, double c, double d)
    {
        c3 = a; c2 = b; c1 = c; c0 = d;
    }
  
    public double ValorPara(double x)
    {
       double resultado;
       resultado = c3*x*x*x + c2*x*x + c1*x + c0;
       return resultado; // devolver el valor calculado
    }
}</pre>
<p>El siguiente paso es añadir al mismo fichero una clase de aplicacion publica que utilice la clase de Objetos <strong>CEcuacion</strong>. Esta clase aplicacion debe ser de la siguiente forma:</p>
<pre class="brush: java; gutter: true">public class CMiAplicacion
{
    public static void main(String[] args)
    {
       CEcuacion ec1 = new CEcuacion();
       ec1.Ecuación(1, -3.2, 0, 7);
    
       double r = ec1.ValorPara(1);
       System.out.println(r);
    
       r = ec1.ValorPara(1.5);
       System.out.println(r);
    }
}</pre>
<p>Recuerda que el método <strong>main</strong> es por donde empieza a ejecutarse la aplicacion. Este metodo crea un objeto <strong>ecl</strong> de la clase<strong> CEcuacion</strong>.</p>
<p>Para probar la aplicacion con otros valores tenemos que modificar los siguientes datos en la Clase CMiAplicacion:</p>
<p>ec1.Ecuación ( <span style="color: #800000;"><strong>1 ,  -3.2 , 0, 7 </strong></span>);<br />
r = ec1.ValorPara<span style="color: #800000;"><strong>( 1.5 </strong></span>);</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ApuntesJava?a=bLGcg4gM8OE:FB0zpKKQJtQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ApuntesJava?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.apuntesjava.com/ejercicio-de-ecuacion-con-clases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.apuntesjava.com/ejercicio-de-ecuacion-con-clases/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ejercicio-de-ecuacion-con-clases</feedburner:origLink></item>
		<item>
		<title>Tablero de Ajedrez y Posicion del Alfil {JAVA}</title>
		<link>http://feedproxy.google.com/~r/ApuntesJava/~3/15jAGB06Yn8/</link>
		<comments>http://www.apuntesjava.com/tablero-de-ajedrez-y-posicion-del-alfil-java/#comments</comments>
		<pubDate>Tue, 17 Jul 2012 04:46:18 +0000</pubDate>
		<dc:creator>Carlos Meza</dc:creator>
				<category><![CDATA[Ejercicios Java]]></category>
		<category><![CDATA[bucle]]></category>
		<category><![CDATA[iteracion]]></category>
		<category><![CDATA[tablero ajedrez]]></category>

		<guid isPermaLink="false">http://www.apuntesjava.com/?p=194</guid>
		<description><![CDATA[Tablero de Ajedrez y Posicion del Alfil {JAVA}
Hola, empezando con los ejercicios les dejo un simple ejemplo de como pintar por consola un Tablero de Ajedrez y como valor agregado tambien pintaremos la posicion de un Alfil incluyendo la trayectoria que puede recorrer dentro del tablero.
public class Ajedrez {
	// Imprimir un tablero de ajedrez.
	public static void main(String[] args) {
		int falfil, ...]]></description>
				<content:encoded><![CDATA[<h2>Tablero de Ajedrez y Posicion del Alfil {JAVA}</h2>
<p>Hola, empezando con los ejercicios les dejo un simple ejemplo de como pintar por consola un Tablero de Ajedrez y como valor agregado tambien pintaremos la posicion de un Alfil incluyendo la trayectoria que puede recorrer dentro del tablero.</p>
<pre class="brush: java; gutter: true">public class Ajedrez {
	// Imprimir un tablero de ajedrez.
	public static void main(String[] args) {
		int falfil, calfil; // posición inicial del alfil
	    int fila, columna;  // posición actual del alfil
	    falfil = 5; //Fila
	    calfil = 4; //Columna
	    System.out.println(&quot;Posición del alfil:&quot;); 
	    System.out.println(&quot;-------------------------&quot;); 
	    System.out.print(&quot; fila    &quot; + falfil); 
	    System.out.println(); 
	    System.out.print(&quot; columna &quot; + calfil); 
	    System.out.println(); 
	    System.out.println(&quot;-------------------------&quot;);    

	    for (fila = 1; fila &lt;= 8; fila++)
	    {
	      for (columna = 1; columna &lt;= 8; columna++)
	      {
	        if ((fila + columna == falfil + calfil) ||
	           (fila - columna == falfil - calfil))
	          System.out.print(&quot;* &quot;);
	        else if ((fila + columna) % 2 == 0)
	          System.out.print(&quot;B &quot;);
	        else
	          System.out.print(&quot;N &quot;);
	      }
	      System.out.println(); // cambiar de fila
	    }
	}
}</pre>
<p>En esta oportunidad tendremos que ingresar la posicion del alfil manualmente en:</p>
<ul>
<li>falfil = <strong>5</strong>;   //Posicion de Fila</li>
<li>calfil = <strong>4</strong>;   //Posicion de Columna</li>
</ul>
<p>Mas adelante implementaremos un metodo que permita ingresar la posicion en tiempo de ejecucion&#8230;</p>
<p><a href="http://www.apuntesjava.com/wp-content/uploads/2012/07/ajedrez-Java-Alfil.png"><img class="aligncenter size-full wp-image-195" title="ajedrez Java Alfil" src="http://www.apuntesjava.com/wp-content/uploads/2012/07/ajedrez-Java-Alfil.png" alt="ajedrez Java Alfil Tablero de Ajedrez y Posicion del Alfil {JAVA}" width="225" height="235" /></a></p>
<p>Como podemos apreciar en la captura tenemos la posición   vertical = 5      horizontal = 4</p>
<p>De la misma forma que se pudo implementar la posición del alfil en el tablero también se puede implementar todas fichas del ajedrez. Pruebenlo, practiquenlo y disfrútenlo&#8230; <img src='http://www.apuntesjava.com/wp-includes/images/smilies/icon_wink.gif' alt="icon wink Tablero de Ajedrez y Posicion del Alfil {JAVA}" class='wp-smiley' title="Tablero de Ajedrez y Posicion del Alfil {JAVA}" /> </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ApuntesJava?a=15jAGB06Yn8:W_ciBgiv1r8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ApuntesJava?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.apuntesjava.com/tablero-de-ajedrez-y-posicion-del-alfil-java/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.apuntesjava.com/tablero-de-ajedrez-y-posicion-del-alfil-java/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=tablero-de-ajedrez-y-posicion-del-alfil-java</feedburner:origLink></item>
		<item>
		<title>Cambiando el tamaño y la posición de JComponent y sus propiedades</title>
		<link>http://feedproxy.google.com/~r/ApuntesJava/~3/bzFbAUqtewM/</link>
		<comments>http://www.apuntesjava.com/cambiando-el-tamano-y-la-posicion-de-jcomponent-y-sus-propiedades/#comments</comments>
		<pubDate>Sat, 16 Jun 2012 23:04:56 +0000</pubDate>
		<dc:creator>Carlos Meza</dc:creator>
				<category><![CDATA[Manual]]></category>
		<category><![CDATA[Swing]]></category>

		<guid isPermaLink="false">http://www.apuntesjava.com/?p=184</guid>
		<description><![CDATA[Propiedades
Todos los componentes Swing cumplen la especificación de los JavaBeans. Entre las cinco características que debe soportar un JavaBean se encuentra un conjunto de propiedades y sus métodos de acceso asociados. Una propiedad es una variable global, y sus métodos de acceso, si tiene alguno, son normalmente de la forma setPropertyname(), getPropertyname() o isPropertyname().
Una propiedad que no tienen ningún evento asociado a un ...]]></description>
				<content:encoded><![CDATA[<h2>Propiedades</h2>
<p>Todos los componentes <strong>Swing</strong> cumplen la especificación de los<strong> JavaBeans</strong>. Entre las cinco características que debe soportar un JavaBean se encuentra un conjunto de propiedades y sus métodos de acceso asociados. Una propiedad es una variable global, y sus métodos de acceso, si tiene alguno, son normalmente de la forma <em><strong>setPropertyname(), getPropertyname() o isPropertyname().</strong></em></p>
<p>Una propiedad que no tienen ningún evento asociado a un cambio en su valor se llama una propiedad simple. Una propiedad ligada<strong> (bound property)</strong> es aquella para la que se lanzan<strong> PropertyChangeEvents</strong> después de un cambio en su estado. Podemos registrar nuestros <strong>PropertyChangeListeners</strong> para escuchar PropertyChangeEvents a través del método addPropertyChangeListener() de JComponent. Una propiedad restringida (constrained property) es aquella para la que se lanzan <strong>PropertyChangeEvents</strong> justo antes de que ocurra un cambio en su estado. Podemos resgistrar <strong>VetoableChangeListeners</strong> que escuchen a <strong>PropertyChangeEvents</strong> por medio del método <strong>addVetoableChangeListener() de JComponent</strong>. Se puede vetar un cambio en el código de manejo de eventos de un VetoableChangeListener lanzando una PropertyVetoException. <em>(Sólo hay una clase en Swing con propiedades restringidas: JInternalFrame).</em></p>
<blockquote><p><strong>Nota:</strong> Todos estos oyentes y eventos están definidos en el paquete java.awt.beans.</p></blockquote>
<p>Los <strong>PropertyChangeEvent’s</strong> llevan consigo tres segmentos de información: nombre de la propiedad, el valor antiguo, y el nuevo. Los Beans pueden usar instancias de<br />
<strong>PropertyChangeSupport</strong> para manejar el lanzamiento de PropertyChangeEvents correspondientes a cada propiedad ligada, a todos los oyentes registrados. De manera similar, una instancia de VetoableChangeSupport se puede usar para manejar el envío de todos los PropertyChangeEvents correspondientes a cada propiedad restringida.</p>
<p>Swing introduce una nueva clase llamada SwingPropertyChangeSupport <em>(definida en javax.swing.event)</em> que es una subclase casi idéntica de PropertyChangeSupport. La<br />
diferencia es que SwingPropertyChangeSupport se ha construido para que sea más eficiente. Lo consigue sacrificando la seguridad entre los hilos, que, como veremos más tarde en este capítulo, no es asunto de Swing si se siguen consistentemente las reglas generales de la multitarea (porque todo el procesamiento de eventos debería llevarse a cabo en un solo hilo-el hilo de despacho de eventos). Por lo tanto, si confiamos en que nuestro código ha sido construido de manera segura respecto a los hilos,<br />
deberíamos usar esta versión más eficiente, en lugar de PropertyChangeSupport.</p>
<blockquote><p><strong>Nota:</strong> No hay equivalente en Swing para VetoableChangeSupport porque sólo hay cuatro propiedades restringidas en Swing&#8211;todas definidas en JInternalFrame.</p></blockquote>
<p><strong>Swing</strong> introduce un nuevo tipo de propiedad que podemos llamar de cambio <strong>(change property)</strong>, a falta de un nombre dado. <strong>Usamos ChangeListeners para escuchar ChangeEvents</strong> que se lanzan cuando cambia el estado de estas propiedades. Un ChangeEvent sólo lleva consigo un segmento de información: la fuente del evento. Por esta razón, las propiedades de cambio son menos poderosas que las propiedades ligadas y que las restringidas, pero están más extendidas. Un JButton, por ejemplo, envía eventos de cambios todas las veces que se arma (se pulsa por primera vez), se presiona, o se suelta .</p>
<p>Otro nuevo aspecto en el estilo de las propiedades que introduce Swing es la noción de propiedades cliente <strong>(client properties)</strong>. Estas son básicamente pares clave/valor que se guardan en una <strong>Hashtable </strong>facilitada por todos los componentes Swing. Esto permite añadir y borrar propiedades en tiempo de ejecución, y se usa a menudo como un sitio donde guardar datos sin tener que construir una nueva subclase.</p>
<blockquote><p><strong>Peligro:</strong> Las propiedades cliente pueden parecer una forma fantástica de añadir soporte al cambio de propiedades para componentes personalizados, pero se nos recomienda explícitamente no hacerlo: “El diccionario clientProperty no está pensado para soportar un alto grado de extensiones de JComponent y no se debería considerar como una alternativa a la creación de subclases cuando se diseña un nuevo componente.”API</p></blockquote>
<p>Las propiedades cliente son ligadas: cuando una de ellas cambia, se envía un PropertyChangeEvent a todos los PropertyChangeListeners registrados. Para añadir una propiedad a la Hashtable de propiedades cliente de un componente, tenemos que hacer lo siguiente:</p>
<pre class="brush: java; gutter: true">miComponente.putClientProperty(&quot;minombre&quot;, miValor);</pre>
<p>Para recuperar una propiedad cliente:</p>
<pre class="brush: java; gutter: true">miObjeto = miComponente.getClientProperty(&quot;minombre&quot;);</pre>
<p>Para borrar una propiedad cliente le asignamos un valor null:</p>
<pre class="brush: java; gutter: true">miComponente.putClientProperty(&quot;minombre&quot;, null);</pre>
<p>Por ejemplo, <strong>JDesktopPane</strong> usa una propiedad cliente para controlar la visualización del contorno mientras arrastramos JInternalFrames <em>(esto funcionará sin importar el L&amp;F que se esté usando):</em></p>
<pre class="brush: java; gutter: true">miDesktop.putClientProperty(&quot;JDesktopPane.dragMode&quot;, &quot;outline&quot;);</pre>
<blockquote><p><strong>Nota:</strong> Puede localizar que propiedades tienen tienen eventos de cambio asociados con ellas, así como cualquier otro tipo de evento, inspeccionando el código fuente de Swing. A no ser que esté usando Swing para interfaces simples, le recomendamos que se acostumbre a esto.</p></blockquote>
<p>Cinco componentes Swing tienen propiedades cliente especiales a las que solo el Metal L&amp;F presta atención. Concretamente son estas:</p>
<ul>
<li><strong>JTree.lineStyle</strong></li>
</ul>
<p>Un String que se usa para especificar si las relaciones entro los nodos se muestran como líneas angulosas (“Angled”), líneas horizontales que definen los límites de las celdas<br />
(“Horizontal” &#8212; por defecto), o no se muestran líneas (“None”).</p>
<ul>
<li><strong>JScrollBar.isFreeStanding</strong></li>
</ul>
<p>Un Boolean que se usa para especificar si JScrollbar tendrá un borde <strong>(Boolean.FALSE - - por defecto)</strong> o sólo las partes superior e izquierda (Boolean.TRUE).</p>
<ul>
<li><strong>JSlider.isFilled</strong></li>
</ul>
<p>Un Boolean que especifica si la parte más baja de un deslizador (JSlider) debe estar rellena (Boolean.TRUE) o no (Boolean.FALSE &#8212; por defecto).</p>
<ul>
<li><strong>JToolBar.isRollover</strong></li>
</ul>
<p>Un Boolean que sirve para determinar si un botón de la barra de herramientas muestra un borde grabado sólo cuando el puntero del ratón se encuentra entre sus límites y ningún borde cuando no (Boolean.TRUE), o se usa siempre un borde grabado (Boolean.FALSE &#8212; por defecto).</p>
<ul>
<li><strong>JInternalFrame.isPalette</strong></li>
</ul>
<p>Un Boolean que especifica si se usa un borde muy fino (Boolean.TRUE) o el borde normal (Boolean.FALSE &#8212; por defecto). En Java 2 FCS no se usa esta propiedad.</p>
<h2>Cambiando el tamaño y la posición</h2>
<p>Como <strong>JComponent desciende de java.awt.Container</strong>, hereda todas las funcionalidades de posición y tamaño a las que estamos acostumbrados. Para manejar el tamaño preferido, máximo y mínimo de un componente disponemos de los siguientes métodos:</p>
<ul>
<li><strong>setPreferredSize(), getPreferredSize()</strong></li>
</ul>
<p>El tamaño deseable de un componente. Lo usan la mayoría de los administradores de disposición (Layout Managers) para dimensionar los componentes.</p>
<ul>
<li><strong>setMinimumSize(), getMinimumSize()</strong></li>
</ul>
<p>Usados durante el posicionamiento para especificar los límites inferiores de las dimensiones del componente.</p>
<ul>
<li><strong>setMaximumSize(), getMaximumSize()</strong></li>
</ul>
<p>Usados durante el posicionamiento para especificar los límites superiores de las dimensiones del componente.</p>
<p>Cada uno de los métodos <em><strong>setXX()/getXX() acepta/devuelve una instancia de Dimension</strong></em>. Si un administrador de disposición presta atención o no a estos tamaños depende solamente de la implementación de dicho administrador. Es perfectamente factible construir un administrador que simplemente los ignore todos, o que sólo preste atención a uno. El dimensionado de los componentes en un contenedor es específico de cada administrador de disposición.</p>
<p>El método <strong>setBounds() de JComponent</strong> se puede usar para asignar a un componente el tamaño y la posición dentro de su contenedor padre. Este método está sobrecargado, y puede tomar tanto parámetros de tipo<em><strong> Rectangle (java.awt.Rectangle)</strong></em> como cuatro parámetros de tipo int que represente la altura, la anchura y las coordenadas x e y.</p>
<p>Por ejemplo, estas dos formas son equivalentes:</p>
<pre class="brush: java; gutter: true">miComponent.setBounds(120,120,300,300);
Rectangle rec = new Rectangle(120,120,300,300);
miComponent.setBounds(rec);</pre>
<p>Verá que <em>setBounds()</em> no pasará por encima de ninguna de las políticas de posicionamiento activas a causa de un administrador de disposición de un contenedor padre. Por esta razón una llamada a setBounds() puede parecer ignorada en determinadas situaciones porque intentó hacer su trabajo, pero el componente fue obligado a volver a su tamaño original por el administrador de disposición (los administradores de disposición siempre tienen la última palabra determinando el tamaño de un componente). setBounds() se usa normalmente para manejar componentes hijos en contenedores sin administrador de disposición (como JLayeredPane, JDesktopPane, y JComponent). Por ejemplo, usamos normalmente setBounds() cuando añadimos un JInternalFrame a un JDesktopPane. El tamaño de un componente se puede obtener al estilo de AWT:</p>
<pre class="brush: java; gutter: true">int h = miComponente.getHeight();
int w = miComponente.getWidth();</pre>
<p>El tamaño se puede recuperar también como una instancia de Rectangle o de Dimension:</p>
<pre class="brush: java; gutter: true">Rectangle rec2 = miComponente.getBounds();
Dimension dim = miComponente.getSize();</pre>
<p>Rectangle contiene cuatro propiedades accesibles públicamente que describen su posición y su tamaño:</p>
<pre class="brush: java; gutter: true">int recX = rec2.x;
int recY = rec2.y;
int recAnchura = rec2.width;
int recAltura = rec2.height;</pre>
<p>Dimension contiene dos propiedades accesibles públicamente que describen su tamaño:</p>
<pre class="brush: java; gutter: true">int dimAnchura = dim.width;
int dimAltura = dim.height;</pre>
<p>Las coordenadas que una instancia de Rectangle devuelve usando su método getBounds() representan la situación de un componente dentro de su padre. Estas coordenadas se pueden obtener también usando los métodos <strong>getX() y getY()</strong>. Adicionalmente, podemos determinar la posición de un componente dentro de su contenedor mediante el método <em><strong>setLocation(int x, int y).</strong></em></p>
<p><strong>JComponent también mantiene una alineación</strong>. La alineación horizontal o vertical se puede especificar con valores reales (float) entre 0.0 y 1.0: 0.5 significa el centro, valores más cercanos a 0.0 significan izquierda o arriba, y más cercanos a 1.0 significan derecha o abajo. Los correspondientes métodos de JComponent son:</p>
<pre class="brush: java; gutter: true">setAlignmentX(float f);
setAlignmentY(float f);</pre>
<p>Estos valores se usan sólo en contenedores que se manejan mediante <strong>BoxLayout o OverlayLayout.</strong></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ApuntesJava?a=bzFbAUqtewM:UMy4hc_n_QE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ApuntesJava?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.apuntesjava.com/cambiando-el-tamano-y-la-posicion-de-jcomponent-y-sus-propiedades/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.apuntesjava.com/cambiando-el-tamano-y-la-posicion-de-jcomponent-y-sus-propiedades/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=cambiando-el-tamano-y-la-posicion-de-jcomponent-y-sus-propiedades</feedburner:origLink></item>
		<item>
		<title>Componentes Swing</title>
		<link>http://feedproxy.google.com/~r/ApuntesJava/~3/mrbBFwcDVfQ/</link>
		<comments>http://www.apuntesjava.com/componentes-swing/#comments</comments>
		<pubDate>Sun, 27 May 2012 01:39:58 +0000</pubDate>
		<dc:creator>Carlos Meza</dc:creator>
				<category><![CDATA[Manual]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[jcomponent]]></category>
		<category><![CDATA[metodos]]></category>
		<category><![CDATA[swing]]></category>

		<guid isPermaLink="false">http://www.apuntesjava.com/?p=170</guid>
		<description><![CDATA[Componentes Swing
Los componentes son los elementos básicos de la programación con Swing. Todo lo que se ve en un GUI de Java es un componente. Los componentes se colocan en otros
elementos llamados contenedores que sirven para agrupar componentes. Un administrador de diseño se encarga de de disponer la presentación de los componentes en un dispositivo de presentación concreto.
La clase javax.swing.JComponent es la clase ...]]></description>
				<content:encoded><![CDATA[<h2>Componentes Swing</h2>
<p>Los componentes son los elementos básicos de la programación con Swing. Todo lo que se ve en un GUI de Java es un componente. Los componentes se colocan en otros<br />
elementos llamados contenedores que sirven para agrupar componentes. Un administrador de diseño se encarga de de disponer la presentación de los componentes en un dispositivo de presentación concreto.</p>
<p>La clase<strong> javax.swing.JComponent</strong> es la clase padre de todos los componentes. A su vez,<strong> JComponent</strong> desciende de java.awt.container y ésta de<strong> java.awt.component</strong>. De esto se deduce que <em>Swing es una extensión de AWT</em>, de hecho su estructura es análoga.</p>
<p style="text-align: center;"><a href="http://www.apuntesjava.com/wp-content/uploads/2012/05/componentes-swing.png"><img class="aligncenter  wp-image-171" title="Referencias de las clases swing" src="http://www.apuntesjava.com/wp-content/uploads/2012/05/componentes-swing.png" alt="componentes swing Componentes Swing" width="605" height="610" /></a></p>
<p>La clase <strong>JComponent</strong> posee métodos para controlar la apariencia del objeto. Por ejemplo: la visibilidad, tamaño, posición, tipo de letra, color,&#8230; Al dibujar un componente, se le asigna un dispositivo de presentación. Además posee métodos que controlan el comportamiento del componente.</p>
<p>Cuando el usuario ejecuta una acción sobre un componente, entonces se crea un objeto de evento que describe el suceso. El objeto de evento se envía a objetos de control de eventos (Listeners). Los eventos son uno de los pilares de la construcción de Interfaces de usuario y una de las bases de la comunicación entre objetos.</p>
<p>&nbsp;</p>
<h3>Pares</h3>
<p>En AWT se usaban interfaces de pares. Esto significaba que cada componente creado con AWT, creaba un par igual correspondiente al mundo real. Es decir al crear el botón,<br />
existía el botón virtual creado en Java y el que realmente era dibujado en la pantalla (el real). El programador no necesita saber de la existencia de ese par, la comunicación del objeto creado con su par corría por cuenta de AWT.</p>
<p>Este modelo de componentes se elimina en Swing. En Swing se habla de componentes de peso ligero. La clase JComponent que es la raíz de clases Swing, no utiliza un par, cada componente es independiente del sistema de ventanas principal. Se dibujan a sí mismos y responden a los eventos de usuario sin ayuda de un par.</p>
<p>La ventaja de este modelo es que requiere menos recursos y que su modificación visual es más ágil y efectiva.</p>
<p>&nbsp;</p>
<h3>Modelo / Vista  / Controlador</h3>
<p>Se trata del modelo fundamental del trabajo con interfaces de usuario por parte de Swing. Consiste en tres formas de abstracción. Un mismo objeto se ve de esas tres<br />
formas:</p>
<ul>
<li>Modelo. Se refiere al modelo de datos que utiliza el objeto. Es la información que se manipula mediante el objeto Swing.</li>
<li>Vista. Es cómo se muestra el objeto en la pantalla.</li>
<li>Controlador. Es lo que define el comportamiento del objeto.</li>
</ul>
<p>Por ejemplo un array de cadenas que contenga los meses del año, podría ser el modelo de un cuadro combinado de Windows. Un cuadro combinado es un rectángulo con un<br />
botón con una flecha que permite elegir una opción de una lista. La vista de ese cuadro es el hecho de mostrar esas cadenas en ese rectángulo con flecha. Y el controlador es<br />
la capa software que permite capturar el clic del ratón cuando apunta a la flecha del control a fin de mostrar y seleccionar el contenido.</p>
<p>&nbsp;</p>
<h3>Métodos del JComponent</h3>
<p>La clase <strong>JComponent</strong> <strong>es abstracta</strong>, lo cual significa que no puede crear objetos, pero sí es la superclase de todos los componentes visuales (botones, listas, paneles, applets,&#8230;) y por ello la lista de métodos es interminable, ya que proporciona la funcionalidad de todos los componentes. Además puesto que deriva de Component y Container tiene los métodos de estos, por ello aún es más grande esta lista. Algunos son:</p>
<h4>Métodos de Información:</h4>
<table border="1" align="center">
<tbody>
<tr style="background-color: #c5c8c8;" align="center">
<td><strong>Metodo</strong></td>
<td><strong>Uso</strong></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">String<span style="color: #000080;"> getName() </span></span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Obtiene el nombre del componente</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">setname</span>(String nombre) </span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Cambia el nombre del componente</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Container <span style="color: #000080;">getParent</span>()</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Devuelve el contenedor que sostiene a este componente</span></td>
</tr>
</tbody>
</table>
<h4></h4>
<h4>Métodos de Apariencia y Posicion:</h4>
<table border="1" align="center">
<tbody>
<tr style="background-color: #9e9e9e;">
<td style="text-align: center;"><strong>Metodo</strong></td>
<td style="text-align: center;"><strong>Uso</strong></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">setVisible</span>(boolean vis)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Muestra u oculta el componente según el valor del</span><br style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;" /><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">argumento sea true o false</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Color <span style="color: #000080;">getForeground</span>()</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"> Devuelve el color de frente en forma de objeto</span><br style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;" /><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Color</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">setForeGround</span>(Color color) </span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Cambia el color frontal</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Color <span style="color: #000080;">getBackground</span>()</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"> Devuelve el color de fondo en forma de objeto </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">java.awt.Color</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">setBackground</span>(Color color) </span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Cambia el color de fondo</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Point <span style="color: #000080;">getLocation</span>() </span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Devuelve la posición del componente en forma de </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">objeto Point</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void<span style="color: #000080;"> setLocation</span>(int x, int y)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"> Coloca el componente en la posición x, y</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">setLocation</span>(Point p) </span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Coloca el componente en la posición marcada por </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">las coordenadas del punto P</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Dimension <span style="color: #000080;">getSize</span>() </span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Devuelve el tamaño del componente en un objeto </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">de tipo java.awt.Dimension.</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">setSize</span>(Dimension d)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: x-small;"><span style="line-height: 19px;">Coloca un tamaño introduciendo como parámetro un objeto Dimension<br />
</span></span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">setSize</span>(int ancho, int alto) </span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Cambia las dimensiones del objeto en base a un </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">objeto Dimension o indicando la anchura y la </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">altura con dos enteros.</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">setBounds</span>(int x, int y, int ancho, int alto) </span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Determina la posición de la ventana (en la coordenada x, y) así como su tamaño con los </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">parámetros ancho y alto</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">setPreferredSize</span>(Dimension </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">d)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Cambia el tamaño preferido del componente. Este </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">tamaño es el que el componente realmente quiere </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">tener.</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">setToolTipText</span>(String texto)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Hace que el texto indicado aparezca cuando el </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">usuario posa el cursor del ratón sobre el </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">componente</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">String <span style="color: #000080;">getToolTipText</span>() </span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Obtiene el texto de ayuda del componente </span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Cursor <span style="color: #000080;">getCursor</span>()</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Obtiene el cursor del componente en forma de </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">objeto java.awt.Cursor</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">setCursor</span>(Cursor cursor)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Cambia el cursor del componente por el </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">especificado en el parámetro.</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">setFont</span>(Font fuente)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"> Permite especificar el tipo de letra de la fuente del </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">texto</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void<span style="color: #000080;"> putClientProperty</span>(Object </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">clave, Object valor)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Ingresa propiedad a un Objeto</span></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Los objetos<strong> java.awt.Point</strong> tienen como propiedades públicas las coordenadas x e y. Se construyen indicando el valor de esas coordenadas y disponen de varios métodos quepermiten modificar el punto.</p>
<p>Los objetos<strong> java.awt.Dimension</strong> tienen como propiedades la propiedad width (anchura) y height (altura). El método getDimension() obtiene un objeto Dimension con los valores del actual y setDimension() es un método que permite cambiar las dimensiones de varias formas.</p>
<p>Los objetos <strong>java.awt.Color</strong> representan colores y se pueden construir de las siguientes formas:</p>
<ul>
<li><em>Color(int rojo, int verde, int azul)</em>. Construye un objeto color indicando los niveles de rojo, verde y azul.</li>
<li><em>Color(int rgb)</em>. Crea un color usando un único entero que indica los niveles de rojo, verde y azul. Se suele emplear con 6 dígitos en hexadecimal. Ejemplo: 0xFFCC33</li>
<li><em>Color(int rojo, int verde, int azul, int alfa)</em>. Construye un objeto color indicando los niveles de rojo, verde y azul, y un valor de 0 a 255 indicando el valor alfa (alfa indica la transparencia).</li>
<li><em>Color(int rgb).</em> Crea un color usando un único entero que indica los niveles de rojo, verde y azul. Se suele emplear con 6 dígitos en hexadecimal. Ejemplo: 0xFFCC33</li>
<li><em>Color(int rgb, int alfa).</em></li>
</ul>
<p>Además existen constantes de colores ya fabricados: <strong>Color.RED, Color.YELLOW, Color.GREEN, Color.BLUE, Color.PINK, Color.GRAY, Color.CYAN, Color.DARK_GRAY, Color.LIGHT_GRAY, Color.MAGENTA, Color.PINK y Color.WHITE</strong>. Los objetos Color poseen además métodos interesantes para manipular colores.</p>
<p>Finalmente <strong>java.awt.Cursor</strong> es una clase que representa cursores y que se crea indicando un número que se puede reemplazar por una serie de constantes estáticas de<br />
la propia clase Cursor, que representan cursores. Las constantes son: <strong>Cursor.HAND_CURSOR, Cursor.WAIT_CURSOR, Cursor.CROSSHAIR_CURSOR, Cursor.TEXT_CURSOR</strong> y otros.</p>
<p>&nbsp;</p>
<h4>Metodos de Dibujo</h4>
<table border="1" align="center">
<tbody>
<tr style="background-color: #b6b3ae;" align="center">
<td><strong>Metodo</strong></td>
<td><strong>Uso</strong></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">paint</span>(Graphics p)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Pinta el componente y sus subcomponentes. </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Delega sus funciones en los tres métodos </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">siguientes</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">paintComponent</span>(Graphics p)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Pinta sólo este componente. Este es el método </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">recomendado en Swing para dibujar en un </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">componente.</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">paintComponents</span>(Graphics p)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Llama a los métodos de pintura de todos los </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">componentes de la ventana.</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">paintChildren</span>(Graphics p)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Pinta los componentes hijo de este componente</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">paintBorder</span>(Graphics p)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Pinta el borde del componente </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">protected Graphics</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"><span style="color: #000080;">getComponentGraphics</span>(Graphics g)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Obtiene el objeto gráfico utilizado para dibujar </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">el componente. El argumento es el objeto </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">gráfico original. El otro es el tratado por el </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">componente.</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">update</span>(Graphics g) </span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Llama a paint</span></td>
</tr>
</tbody>
</table>
<h4></h4>
<h4>Activar y Desactivar Componentes</h4>
<table border="1" align="center">
<tbody>
<tr style="background-color: #adadad;" align="center">
<td><strong>Metodo</strong></td>
<td><strong>Uso</strong></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void<span style="color: #000080;"> setEnabled</span>(boolean activar)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Si el argumento es true se habilita el </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">componente, si no, se deshabilita. Un componente </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">deshabilitado es un método que actúa </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">con el usuario.</span><br style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;" /><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Por deshabilitar un componente, no se </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">deshabilitan los hijos.</span></td>
</tr>
</tbody>
</table>
<h4></h4>
<h4>Enfocar</h4>
<p>Para que un componente sea al que van dirigidas las pulsaciones de las teclas o, dicho de otra forma, el que recibe la interacción del usuario, debe poseer el enfoque (focus).</p>
<p>En muchos casos, el enfoque salta de un control al siguiente pulsando la tecla tabulador. Varios métodos se encargan de controlar ese salto:</p>
<table border="1" align="center">
<tbody>
<tr style="background-color: #c3c3c0;" align="center">
<td><strong>Metodo</strong></td>
<td><strong>Uso</strong></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">requestFocus</span>()</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Pide el foco para el componente. Será posible, </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">si este es visible, activado y enfocable </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">focusable). El contenedor del foco también </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">poseerá el foco.</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">boolean <span style="color: #000080;">requestFocusInWindow</span>()</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Pide el foco para el componente si la ventana contenedora poseía el foco. Devuelve true si el foco se puede dar sin problemas. Aunque sólo el evento FOCUS_GAINED es el encargado de </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">indicar que el foco ha sido pasado. </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Actualmente, debido a que el método anterior </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">es dependiente de la plataforma, se </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">recomienda este método siempre que sea</span><br style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;" /><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">posible.</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">transferFocus</span>()</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Hace que el siguiente componente en la lista de </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">tabulaciones, obtenga el foco</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">transferFocusBackward</span>()</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">El foco pasa al anterior componente en la lista </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">de tabulaciones.</span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">void <span style="color: #000080;">setNextFocusableComponent</span>( </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Component c)</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Hace que el componente c sea el siguiente en la lista de tabulaciones. </span></td>
</tr>
<tr>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Component </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;"><span style="color: #000080;">getNextFocusableComponent</span>()</span></td>
<td><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">Obtiene el siguiente componente de la lista de </span><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">tabulaciones.</span></td>
</tr>
</tbody>
</table>
<p></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ApuntesJava?a=mrbBFwcDVfQ:XOKNzMbmEVE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ApuntesJava?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.apuntesjava.com/componentes-swing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.apuntesjava.com/componentes-swing/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=componentes-swing</feedburner:origLink></item>
		<item>
		<title>AWT y Swing</title>
		<link>http://feedproxy.google.com/~r/ApuntesJava/~3/ng5EWpQuI0o/</link>
		<comments>http://www.apuntesjava.com/awt-y-swing/#comments</comments>
		<pubDate>Sun, 27 May 2012 00:53:20 +0000</pubDate>
		<dc:creator>Carlos Meza</dc:creator>
				<category><![CDATA[Manual]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[awt]]></category>
		<category><![CDATA[swing]]></category>

		<guid isPermaLink="false">http://www.apuntesjava.com/?p=166</guid>
		<description><![CDATA[COMPARACIÓN ENTRE AWT Y SWING
Swing es un conjunto de clases desarrolladas por primera vez para Java 1.2 (el llamado Java2), para mejorar el anterior paquete que implementaba clases para fabricar interfaces de usuario, el llamado AWT (Abstract Window Tools) que aún se usa bastante en las aplicaciones Java.
Tanto Swing como AWT forman parte de una colección de clases llamada JFC (Java Foundation Classes) que incluyen ...]]></description>
				<content:encoded><![CDATA[<h2>COMPARACIÓN ENTRE AWT Y SWING</h2>
<p>Swing es un conjunto de clases desarrolladas por primera vez para Java 1.2 (el llamado Java2), para mejorar el anterior paquete que implementaba clases para fabricar interfaces de usuario, el llamado AWT (Abstract Window Tools) que aún se usa bastante en las aplicaciones Java.</p>
<p>Tanto Swing como AWT forman parte de una colección de clases llamada JFC (Java Foundation Classes) que incluyen paquetes dedicados a la programación de interfaces gráficos (así como a la producción multimedia).</p>
<p>Uno de los problemas frecuentes de la programación clásica era como programar interfaces de usuario, ya que esto  implicaba tener que utilizar las API propias del Sistema Operativo y esto provocaba que el código no fuera transportable a otros sistemas.<br />
AWT fue la primera solución a este problema propuesta por Java. AWT está formada por un conjunto de clases que no dependen del sistema operativo, pero que proponen<br />
una serie de clases para la programación de GUIs (graphic users interfaces, interfaces gráficos de usuario; cualquier entorno de comunicación entre el ordenador y el usuario).</p>
<p>AWT usa clases gráficas comunes a todos los sistemas operativos gráficos y luego la máquina virtual traduce esa clase a la forma que tenga en el sistema concreto en el que<br />
se ejecutó el programa, sin importar que dicho sistema sea un sistema X, McIntosh o Windows. La popularidad de AWT desbordó las expectativas de la propia empresa Sun.<br />
La clave de AWT era el uso de componentes iguales (peers). Los elementos de los interfaces AWT dejaban al sistema la responsabilidad de generar realmente los<br />
componentes. Eso aseguraba una vista coherente respecto al sistema en el que se ejecutaba el programa. El problema es que ante la grandiosidad de la imagen en<br />
Windows y Mac OS, otros sistemas quedaban peor ante la misma aplicación. Por ello (y por otros problemas) aparece Swing en la versión 1.2 como parte del JFC<br />
(Java Foundation Classes) que es el kit de clases más importante de Java para las producciones gráficas.</p>
<p>Los problemas de AWT eran:</p>
<ul>
<li> AWT tenía problemas de compatibilidad en varios sistemas.</li>
<li> A AWT le faltaban algunos componentes avanzados (árboles, tablas,&#8230;).</li>
<li> Consumía excesivos recursos del sistema.</li>
</ul>
<p>Swing aporta muchas más clases, consume menos recursos y construye mejor la apariencia de los programas. En cualquier caso, AWT no desaparece; simplemente se<br />
añade a las nuevas capacidades Swing.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ApuntesJava?a=ng5EWpQuI0o:3gorZFpIYBo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ApuntesJava?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.apuntesjava.com/awt-y-swing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.apuntesjava.com/awt-y-swing/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=awt-y-swing</feedburner:origLink></item>
		<item>
		<title>Los Threads o Programacion MultiHilo</title>
		<link>http://feedproxy.google.com/~r/ApuntesJava/~3/Q4dYWb8tOMg/</link>
		<comments>http://www.apuntesjava.com/los-threads-o-programacion-multihilo/#comments</comments>
		<pubDate>Sat, 19 May 2012 06:03:54 +0000</pubDate>
		<dc:creator>Carlos Meza</dc:creator>
				<category><![CDATA[Fundamentos]]></category>
		<category><![CDATA[Manual]]></category>
		<category><![CDATA[hilo]]></category>
		<category><![CDATA[multithreading]]></category>
		<category><![CDATA[sleep]]></category>
		<category><![CDATA[thread]]></category>

		<guid isPermaLink="false">http://www.apuntesjava.com/?p=156</guid>
		<description><![CDATA[A. Introducción
Durante la ejecución de los programas existen muchas operaciones que precisan de una espera; en busca de una interacción con el exterior, dejando pasar el tiempo, esperando a que otro proceso acabe&#8230;
Java permite que estos tiempos desaprovechados sean utilizados por el programador para realizar determinadas tareas, y así aprovechar el microprocesador durante toda la ejecución del programa. Para ello ...]]></description>
				<content:encoded><![CDATA[<h2>A. Introducción</h2>
<p>Durante la ejecución de los programas existen muchas operaciones que precisan de una espera; en busca de una interacción con el exterior, dejando pasar el tiempo, esperando a que otro proceso acabe&#8230;</p>
<p>Java permite que estos tiempos desaprovechados sean utilizados por el programador para realizar determinadas tareas, y así aprovechar el microprocesador durante toda la ejecución del programa. Para ello implementa el concepto de threads, o hilos de control del programa.</p>
<p>Mediante el uso de varios <em>threads</em>, se consigue ejecutar varios procesos en paralelo, de forma que cuando uno de ellos esté esperando algún evento, permita que el microprocesador ejecute alguno de los otros threads en espera. Cuando el evento que el primer thread esperaba sucede, de nuevo se intercambian los threads para que el primer thread continúe su ejecución.</p>
<p>Todo esto viene a suplir a la técnica de exclusión mutua denominada utilización de semáforos, extendida entre los programadores de C en UNIX.</p>
<p><a href="http://www.apuntesjava.com/wp-content/uploads/2012/05/threads-multithreading.gif"><img class="aligncenter size-full wp-image-162" title="threads multithreading" src="http://www.apuntesjava.com/wp-content/uploads/2012/05/threads-multithreading.gif" alt="threads multithreading Los Threads o Programacion MultiHilo" width="563" height="262" /></a></p>
<p>&nbsp;</p>
<h2>B. Utilización de thread</h2>
<p>Para crear un thread, se ha de implementar una clase, extendiendo la clase base Runnable, y crear un objeto de la clase Thread. Este objeto representará un nuevo hilo de control, que será accionado cuando invoquemos al método start() del thread. En ese momento este hilo se activará, ejecutando (si el planificador de hilos considera que es el momento), el método run() de la clase en que todo esto suceda.</p>
<p>Por ejemplo, el siguiente programa utiliza dos hilos, el hilo general main, y el hilo thDemo que creamos:</p>
<pre class="brush: java; gutter: true">import java.io.*;
import java.net.*;

class ThreadDemo implements Runnable {

     ThreadDemo() {
            Thread thDemo = new Thread( this, &quot;ThDemo&quot; );
            thDemo.start();
     }

     public void run() {
            try {
                  Thread.sleep(3000);
           } catch( InterruptedException e ) { }
           System.out.println(&quot;Saliendo del hilo hijo&quot;);
     }

     public static void main( String args[] ){
               new ThreadDemo();
               try {
                       for ( int i = 5 ; i &gt;0 ; i-- ) {
                             System.out.println(&quot; Seg: &quot; + i );
                             Thread.sleep(1000);
                       }
               } catch( InterruptedException e ) { }
               System.out.println(&quot;Saliendo del main&quot;);
      }
}</pre>
<p>Ambos hilos esperan utilizando el método<em> sleep()</em> de la clase <strong>Thread</strong>; <strong>thDemo</strong> tres segundos, y main cinco segundos. Java utilizará los tres segundos de <strong>thDemo</strong> para ir esperando los tres primeros segundos del hilo main.</p>
<p>Por lo tanto la salida por pantalla al ejecutar el programa es:</p>
<p style="padding-left: 30px;"><strong>prompt&gt; java ThreadDemo</strong></p>
<p style="padding-left: 30px;"><strong>Seg: 5</strong></p>
<p style="padding-left: 30px;"><strong>Seg: 4</strong></p>
<p style="padding-left: 30px;"><strong>Seg: 3</strong></p>
<p style="padding-left: 30px;"><strong>Saliendo del hilo hijo</strong></p>
<p style="padding-left: 30px;"><strong>Seg: 2</strong></p>
<p style="padding-left: 30px;"><strong>Seg: 1</strong></p>
<p style="padding-left: 30px;"><strong>Saliendo del hilo main</strong></p>
<h2>C. Sincronización de threads</h2>
<p>Durante la ejecución de un programa, muchas veces varios procesos han de realizar tareas de una forma sincronizada, actuando en un determinado orden. Para ello en Java se utilizan la palabra reservada syncronized, en la declaración de los procesos con este tipo de características.</p>
<p>Los procesos declarados como syncronized mediante la utilización de excepciones, y de las funciones <em>wait()</em> y<em> notifiy()</em>, respectivamente esperarán a que otro proceso acabe antes de continuar su ejecución.</p>
<p>A continuación se va a ir viendo cómo implementar el clásico problema de exclusión mutua conocido como el problema del productor/consumidor, en el que dos procesos han de acceder a una cola común, en la que el proceso productor inserta elementos en la pila, y el proceso consumidor ha de ir consumiendo los elementos en la pila, cada vez que sean insertados:</p>
<pre class="brush: java; gutter: true">class ColaSincronizada {

      int n;
      boolean bandera = false;

      synchronized int obten() {

              if ( !bandera )
                     try wait(); catch( InterruptedException e );
              System.out.println( &quot;Obtenido: &quot; + n );
              bandera = false;
              notify();
              return n;
       }

        synchronized void coloca( int paramN ) {
              if ( bandera )
                    try wait(); catch( InterruptedException e );
               n = paramN;
               bandera =true;
               System.out.println( &quot;Colocado: &quot; + n );
               notify();
        }
}

class Productor implements Runnable {

           ColaSincronizada colaProductor;
           Productor( ColaSincronizada paramCola ) {
                    colaProductor = paramCola;
                    new Thread( this, &quot;Producer&quot; ).start();
           }

           public void run() {
                    int i = 0;
                    while ( true ) // Bucle infinito
                             colaProductor.coloca( i++ );
           }
}

class Consumidor implements Runnable {
            ColaSincronizada colaConsumidor;
            Consumidor( ColaSincronizada paramCola ) {
                      colaConsumidor = paramCola;
                      new Thread( this, &quot;Consumidor&quot; ).start();
            }

            public void run() {
                      while ( true ) // Bucle infinito
                             colaConsumidor.obten( );
            }
}

public static void main( String args[] ) {

            ColaSincronizada colaLocal = new  ColaSincronizada();
            new Productor( colaLocal );
            new Consumidor( colaLocal );
}</pre>
<p>La salida del programa será:</p>
<p style="padding-left: 30px;"><strong>Colocado: 1</strong></p>
<p style="padding-left: 30px;"><strong>Obtenido: 1</strong></p>
<p style="padding-left: 30px;"><strong>Colocado: 2</strong></p>
<p style="padding-left: 30px;"><strong>Obtenido: 2</strong></p>
<p style="padding-left: 30px;"><strong>Colocado: 3</strong></p>
<p style="padding-left: 30px;"><strong>Obtenido: 3</strong></p>
<p style="padding-left: 30px;"><strong>. . .</strong></p>
<h2>D. Y mucho más</h2>
<p>La utilización de programación concurrente y de los hilos de Java con toda su potencia va mucho más allá de los objetivos de este tutorial. Lo que aquí se ha visto es simplemente una introducción para que el lector sea consciente de cuál es la potencia de este tipo de programación.</p>
<p>La utilización de los threads se extiende con métodos para que el programador controle la alternancia de los hilos. Estos métodos son:</p>
<p><strong>suspend();</strong> Bloquea temporalmente la ejecución de un hilo.<br />
<strong>resume();</strong> Activa un hilo bloqueado.<br />
<strong>stop();</strong> Finaliza la ejecución de un hilo.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ApuntesJava?a=Q4dYWb8tOMg:fKzpj_JmNRA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ApuntesJava?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.apuntesjava.com/los-threads-o-programacion-multihilo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.apuntesjava.com/los-threads-o-programacion-multihilo/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=los-threads-o-programacion-multihilo</feedburner:origLink></item>
		<item>
		<title>Paquetes en Java</title>
		<link>http://feedproxy.google.com/~r/ApuntesJava/~3/MciIbqo8uH4/</link>
		<comments>http://www.apuntesjava.com/paquetes-en-java/#comments</comments>
		<pubDate>Mon, 14 May 2012 02:00:44 +0000</pubDate>
		<dc:creator>Carlos Meza</dc:creator>
				<category><![CDATA[Fundamentos]]></category>
		<category><![CDATA[Manual]]></category>
		<category><![CDATA[ambitos]]></category>
		<category><![CDATA[classpath]]></category>
		<category><![CDATA[package]]></category>
		<category><![CDATA[paquetes]]></category>

		<guid isPermaLink="false">http://www.apuntesjava.com/?p=151</guid>
		<description><![CDATA[Introducción
Los paquetes son el mecanismo por el que Java permite agrupar clases, interfaces, excepciones y constantes. De esta forma, se agrupan conjuntos de estructuras de datos y de clases con algún tipo de relación en común.
Con la idea de mantener la reutilización y facilidad de uso de los paquetes desarrollados es conveniente que las clases e interfaces contenidas en los ...]]></description>
				<content:encoded><![CDATA[<h2>Introducción</h2>
<p>Los paquetes son el mecanismo por el que Java permite agrupar clases, interfaces, excepciones y constantes. De esta forma, se agrupan conjuntos de estructuras de datos y de clases con algún tipo de relación en común.</p>
<p>Con la idea de mantener la reutilización y facilidad de uso de los paquetes desarrollados es conveniente que las clases e interfaces contenidas en los mismos tengan cierta relación funcional. De esta manera los desarrolladores ya tendrán una idea de lo que están buscando y fácilmente sabrán qué pueden encontrar dentro de un paquete.</p>
<p>&nbsp;</p>
<h2>Creación de un paquete</h2>
<h3>a.) Declaración</h3>
<p>Para declarar un paquete se utiliza la sentencia <em><strong>package</strong></em> seguida del nombre del paquete que estemos creando:</p>
<pre class="brush: java; gutter: true">package NombrePaquete;</pre>
<p>La estructura que ha de seguir un fichero fuente en Java es:</p>
<ul>
<li>Una única sentencia de paquete (opcional).</li>
<li>Las sentencias de importación deseadas (opcional).</li>
<li>La declaración de una (y sólo una) clase pública (public).</li>
<li>Las clases privadas del paquete (opcional).</li>
<li>Por lo tanto la sentencia de declaración de paquete ha de ser la primera en un archivo fuente Java.</li>
</ul>
<div></div>
<h3>b.) Nomenclatura</h3>
<p>Para que los nombres de paquete puedan ser fácilmente reutilizados en toda una compañía o incluso en todo el mundo es conveniente darles nombres únicos. Esto puede ser una tarea realmente tediosa dentro de una gran empresa, y absolutamente imposible dentro de la comunidad de Internet.</p>
<p>Por eso se propone asignar como paquetes y subpaquetes el nombre de dominio dentro de Internet. Se verá un ejemplo para un dominio que se llamase<strong><em> japon.magic.com</em></strong>, un nombre apropiado sería <em><strong>com.magic.japon.paquete.</strong></em></p>
<p>&nbsp;</p>
<h3>c.) Subpaquetes</h3>
<p>Cada paquete puede tener a su vez paquetes con contenidos parecidos, de forma que un programador probablemente estará interesado en organizar sus paquetes de forma jerárquica. Para eso se definen los subpaquetes.</p>
<p>Para crear un subpaquete bastará con almacenar el paquete hijo en un directorio <em>Paquete/Subpaquete.</em></p>
<p>Así una clase dentro de un subpaquete como <strong><em>Paquete.Subpaquete.clase</em></strong> estará codificada en el fichero<em><strong> Paquete/Subpaquete.java.</strong></em></p>
<p>El JDK define una variable de entorno denominada <strong>CLASSPATH</strong> que gestiona las rutas en las que el JDK busca los subpaquetes. El directorio actual suele estar siempre incluido en la variable de entorno CLASSPATH.</p>
<p>&nbsp;</p>
<h2>Uso de un paquete</h2>
<p>Con el fin de importar paquetes ya desarrollados se utiliza la sentencia import seguida del nombre de paquete o paquetes a importar.</p>
<p>Se pueden importar todos los elementos de un paquete o sólo algunos.</p>
<p>Para importar todas las clases e interfaces de un paquete se utiliza el metacaracter <strong>*</strong>:</p>
<pre class="brush: java; gutter: true">import PaquetePrueba.*;</pre>
<p>También existe la posibilidad de que se deseen importar sólo algunas de las clases de un cierto paquete o subpaquete:</p>
<pre class="brush: java; gutter: true">import Paquete.Subpaquete1.Subpaquete2.Clase1;</pre>
<p>Para acceder a los elementos de un paquete, no es necesario importar explícitamente el paquete en que aparecen, sino que basta con referenciar el elemento tras una especificación completa de la ruta de paquetes y subpaquetes en que se encuentra.</p>
<p><strong>Paquete.Subpaquetes1.Subpaquete2.Clase_o_Interfaz.elemento</strong></p>
<p>En la API de Java se incluyen un conjunto de paquetes ya desarrollados que se pueden incluir en cualquier aplicación (o applet) Java que se desarrolle.</p>
<p>&nbsp;</p>
<h2>Ámbito de los elementos de un paquete</h2>
<p>Al introducir el concepto de paquete, surge la duda de cómo proteger los elementos de una clase, qué visibilidad presentan respecto al resto de elementos del paquete, respecto a los de otros paquetes&#8230;</p>
<p>Ya en la herencia se vieron los identificadores de visibilidad <strong>public</strong> <em>(visible a todas las clases)</em>, <strong>private</strong> <em>(no visible más que para la propia clase)</em>, y<strong> protected</strong> <em>(visible a clases hijas).</em></p>
<p>Por defecto se considera los elementos (clases, variables y métodos) de un mismo paquete como visibles entre ellos (supliendo las denominadas clases amigas de C++).</p>
<p><a href="http://www.apuntesjava.com/wp-content/uploads/2012/05/ambitos-en-paquete-java.png"><img class="aligncenter size-full wp-image-152" title="ambitos en paquete java" src="http://www.apuntesjava.com/wp-content/uploads/2012/05/ambitos-en-paquete-java.png" alt="ambitos en paquete java Paquetes en Java" width="505" height="299" /></a></p>
<p>Todas las reglas explicadas en este apartado son igualmente válidas para las interfaces Java.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ApuntesJava?a=MciIbqo8uH4:A34B7x_MNdc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ApuntesJava?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.apuntesjava.com/paquetes-en-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.apuntesjava.com/paquetes-en-java/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=paquetes-en-java</feedburner:origLink></item>
		<item>
		<title>Interfaces en Java</title>
		<link>http://feedproxy.google.com/~r/ApuntesJava/~3/4DL-VJKlEBI/</link>
		<comments>http://www.apuntesjava.com/interfaces-en-java/#comments</comments>
		<pubDate>Mon, 14 May 2012 01:35:11 +0000</pubDate>
		<dc:creator>Carlos Meza</dc:creator>
				<category><![CDATA[Fundamentos]]></category>
		<category><![CDATA[Manual]]></category>
		<category><![CDATA[extends]]></category>
		<category><![CDATA[herencia multiple]]></category>
		<category><![CDATA[implements]]></category>
		<category><![CDATA[interfaces]]></category>

		<guid isPermaLink="false">http://www.apuntesjava.com/?p=147</guid>
		<description><![CDATA[INTERFACES
A. Introducción
Las interfaces Java son expresiones puras de diseño. Se trata de auténticas conceptualizaciones no implementadas que sirven de guía para definir un determinado concepto (clase) y lo que debe hacer, pero sin desarrollar un mecanismo de solución.
Se trata de declarar métodos abstractos y constantes que posteriormente puedan ser implementados de diferentes maneras según las necesidades de un programa.
Por ejemplo ...]]></description>
				<content:encoded><![CDATA[<h2>INTERFACES</h2>
<h3>A. Introducción</h3>
<p>Las interfaces Java son expresiones puras de diseño. Se trata de auténticas conceptualizaciones no implementadas que sirven de guía para definir un determinado concepto (clase) y lo que debe hacer, pero sin desarrollar un mecanismo de solución.</p>
<p>Se trata de declarar métodos abstractos y constantes que posteriormente puedan ser implementados de diferentes maneras según las necesidades de un programa.</p>
<p>Por ejemplo una misma interfaz podría ser implementada en una versión de prueba de manera poco óptima, y ser acelerada convenientemente en la versión definitiva tras conocer más a fondo el problema.</p>
<p>&nbsp;</p>
<h2>B. Declaración</h2>
<p>Para declarar una interfaz se utiliza la sentencia interface, de la misma manera que se usa la sentencia class:</p>
<pre class="brush: java; gutter: true">interface MiInterfaz {

     int CONSTANTE = 100;

     int metodoAbstracto( int parametro );

}</pre>
<p>Se observa en la declaración que las variables adoptan la declaración en mayúsculas, pues en realidad actuarán como constantes final. En ningún caso estas variables actuarán como variables de instancia.</p>
<p>Por su parte, los métodos tras su declaración presentan un punto y coma, en lugar de su cuerpo entre llaves. Son métodos abstractos, por tanto, métodos sin implementación</p>
<p>&nbsp;</p>
<h3>C. Implementación de una interfaz</h3>
<p>Como ya se ha visto, las interfaces carecen de funcionalidad por no estar implementados sus métodos, por lo que se necesita algún mecanismo para dar cuerpo a sus métodos.</p>
<p>La palabra reservada implements utilizada en la declaración de una clase indica que la clase implementa la interfaz, es decir, que asume las constantes de la interfaz, y codifica sus métodos:</p>
<pre class="brush: java; gutter: true">class ImplementaInterfaz implements MiInterfaz{

       int multiplicando=CONSTANTE;

       int metodoAbstracto( int parametro ){

                  return ( parametro * multiplicando );

       }

}</pre>
<p>En este ejemplo se observa que han de codificarse todos los métodos que determina la interfaz <em>(metodoAbstracto())</em>, y la validez de las constantes <em>(CONSTANTE)</em> que define la interfaz durante toda la declaración de la clase.</p>
<p>Una interfaz no puede implementar otra interfaz, aunque sí extenderla (extends) ampliándola.</p>
<p>&nbsp;</p>
<h3>D. Herencia múltiple</h3>
<p>Java es un lenguaje que incorpora herencia simple de implementación pero que puede aportar herencia múltiple de interfaz. Esto posibilita la herencia múltiple en el diseño de los programas Java.</p>
<p>Una interfaz puede heredar de más de una interfaz antecesora.</p>
<pre class="brush: java; gutter: true">interface InterfazMultiple extends Interfaz1,Interfaz2{ }</pre>
<p>Una clase no puede tener más que una clase antecesora, pero puede implementar más de una interfaz:</p>
<pre class="brush: java; gutter: true">class MiClase extends SuPadre implements Interfaz1,Interfaz2{ }</pre>
<p>El ejemplo típico de herencia múltiple es el que se presenta con la herencia en diamante:</p>
<p><a href="http://www.apuntesjava.com/wp-content/uploads/2012/05/herencia-multiple.gif"><img class="aligncenter size-full wp-image-148" title="herencia multiple" src="http://www.apuntesjava.com/wp-content/uploads/2012/05/herencia-multiple.gif" alt="herencia multiple Interfaces en Java" width="181" height="161" /></a></p>
<p>Para poder llevar a cabo un esquema como el anterior en Java es necesario que las clases <strong>A, B</strong> y <strong>C</strong> de la figura sean interfaces, y que la clase <strong>D</strong> sea una clase (que recibe la herencia múltiple):</p>
<p><strong>interface A{ }</strong></p>
<p><strong>interface B extends A{ }</strong></p>
<p><strong>interface C extends A{ }</strong></p>
<p><span style="color: #993300;"><strong>class D implements B,C{ }</strong></span></p>
<p>&nbsp;</p>
<h3>E. Colisiones en la herencia múltiple</h3>
<p>En una herencia múltiple, los identificadores de algunos métodos o atributos pueden coincidir en la clase que hereda, si dos de las interfaces padres tienen algún método o atributo que coincida en nombre. A esto se le llama colisión.</p>
<p>Esto se dará cuando las clases padre (en el ejemplo anterior <strong>B y C</strong>) tienen un atributo o método que se llame igual. Java resuelve el problema estableciendo una serie de reglas.</p>
<p>Para la colisión de nombres de atributos, se obliga a especificar a qué interfaz base pertenecen al utilizarlos.</p>
<p>Para la colisión de nombres en métodos:</p>
<ul>
<li>Si tienen el mismo nombre y diferentes parámetros: se produce sobrecarga de métodos permitiendo que existan varias maneras de llamar al mismo.</li>
<li>Si sólo cambia el valor devuelto: se da un error de compilación, indicando que no se pueden implementar los dos.</li>
<li>Si coinciden en su declaración: se elimina uno de los dos, con lo que sólo queda uno.</li>
</ul>
<p>&nbsp;</p>
<h3>F. Envolturas de los tipos simples</h3>
<p>Los tipos de datos de Java no forman parte de la jerarquía de objetos. Sin embargo a veces es necesario crear una representación como objeto de alguno de los tipos de datos simples de Java.</p>
<p>La API de Java contiene un conjunto de interfaces especiales para modificar el comportamiento de los tipos de datos simple. A estas interfaces se las conoce como envolturas de tipo simple.</p>
<p>Todas ellas son hijas de la clase abstracta <strong>Number</strong> y son:</p>
<ul>
<li><strong>Double:</strong> Da soporte al tipo double.</li>
<li><strong>Float:</strong> Da soporte al tipo float.</li>
<li><strong>Integer:</strong> Da soporte a los tipos int, short y byte.</li>
<li><strong>Long:</strong> Da soporte al tipo long.</li>
<li><strong>Character:</strong> Envoltura del tipo char.</li>
<li><strong>Boolean:</strong> Envoltorio al tipo boolean.</li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ApuntesJava?a=4DL-VJKlEBI:i3YcNBHnox4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ApuntesJava?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.apuntesjava.com/interfaces-en-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.apuntesjava.com/interfaces-en-java/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=interfaces-en-java</feedburner:origLink></item>
	</channel>
</rss>
