<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-16389721</id><updated>2012-02-16T12:54:11.232+01:00</updated><category term='NetBeans'/><category term='Java'/><category term='web service'/><category term='Entregas'/><category term='JavaFX'/><title type='text'>MiraQueTeDiga</title><subtitle type='html'>Vamos a poner el brasero para que no nos dé calor el gazpacho</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://miraquetediga.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>dextroso</name><uri>http://www.blogger.com/profile/06368773287016751909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-16389721.post-4102493850673252234</id><published>2008-09-18T19:30:00.008+02:00</published><updated>2008-09-22T11:21:30.117+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>Fechas y Calendarios en Java</title><content type='html'>Centro mi objetivo en construir un &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;widget&lt;/span&gt; que nos sirva de calendario para mostrar y elegir fechas con &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;JavaFX&lt;/span&gt;. El funcionamiento del calendario es el usual. Se muestran los días del mes en que se está, los días de la semana, el mes y el año seleccionado y la posibilidad de navegar por distintos meses y años con dos botones. Cuando se navega se debe obtener un nuevo calendario mensual actualizado. El día de hoy debe estar marcado. El &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;widget&lt;/span&gt; devuelve el día seleccionado, por defecto el día de hoy.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;JavaFX&lt;/span&gt; no tiene ninguna utilidad propia para el manejo de fechas y calendarios. He visto algunos calendarios de ejemplo realizados en &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;swing&lt;/span&gt; más o menos correctos. Sabía que la forma en la que se utilizan fechas en Java es con una clase que guarda milisegundos desde el año 1970. Buscando más referencias encuentro java.util.Date que ya no está en uso y las actuales java.util.Calendar y java.util.GregorianCalendar. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mientras que con Date se necesita &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;formatear&lt;/span&gt; la fecha obtenida con &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;simpleDateFormat&lt;/span&gt; o &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;DateFormat&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Calendar&lt;/span&gt; tiene métodos propios para gestionar el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;formateo&lt;/span&gt; de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;strings&lt;/span&gt; con sus fechas/tiempos. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;En concreto me interesan dos métodos de la clase &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Calendar&lt;/span&gt;, .&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;set&lt;/span&gt;() que establece la hora y .&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;getTime&lt;/span&gt;() que &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;formatea&lt;/span&gt; la salida a un &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;string&lt;/span&gt;. Con estas dos ya podemos construirnos nuestro &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;po&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;gramita&lt;/span&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-4102493850673252234?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/4102493850673252234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/4102493850673252234'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/09/fechas-y-calendarios-en-java.html' title='Fechas y Calendarios en Java'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-1531898804839816163</id><published>2008-09-11T18:17:00.020+02:00</published><updated>2008-09-22T11:20:17.771+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>Arrastrar nodos. Objeto evento de ratón.</title><content type='html'>Me dispongo a construir una barra lateral que me permita recorrer el contenido que se muestre en una zona delimitada. Mi idea es construir una barra que permita arrastrar y soltar un botón para que se mueva solidariamente al contenido. De la página del señor &lt;a href="http://silveiraneto.net/"&gt;SilveiraNeto&lt;/a&gt;, veo cómo arrastrar y soltar un nodo. Ya había probado este efecto antes y había reparado en que esa era la primera vez que veía que una función tomaba como parámetro un objeto del tipo MouseEvent. Ahora que ya ví que Flex gestiona un objeto evento para estos menesteres también, comprendo que es con éste con el que se quieren gestionar de forma sencilla los gestos del ratón o teclado. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El detalle interesante es que una vez creado y asociado el objeto de evento de ratón, podemos adquirir de él información como e.getDragY que nos dice la distancia en el eje Y que ha recorrido el puntero durante el arrastre. Edificante.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Con este detalle sólo me queda hacer referencia al valor del desplazamiento producido por el arrastre del nodo y tomarlo como valor de movimiento para el nodo visible, bien sea haciendo un bind y o un bind translateY.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;En otro orden de cosas, para detectar un doble click utilizo una propiedad de evento de ratón heredada de swing, .getClickCount() que me dice el número de clicks que se han realizado. Me gustaría saber cuál es el intervalo de tiempo que utiliza para el conteo de clicks de ratón. Compruebo que funciona como espero cuando hago unas líneas tal que así:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;onMouseClicked(e:MouseEvent){&lt;br /&gt;   if (e.getClickCount() == 2) then { ... }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-1531898804839816163?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/1531898804839816163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/1531898804839816163'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/09/arrastrar-nodos-objeto-evento-de-ratn.html' title='Arrastrar nodos. Objeto evento de ratón.'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-1752448435910434597</id><published>2008-09-11T12:13:00.006+02:00</published><updated>2008-09-18T19:40:52.931+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>HBox/VBox en CustomNode</title><content type='html'>Esto se contendría en la entrada de Anodino, no sé si ya lo habré comentado. Al crear un CustomNode que contiene un HBox, construido por ejemplo con un for, en el visor de NetBeans se puede ver como se amontonan los nodos que deben ir distribuidos. SIN EMBARGO, cuando se hace referencia a este nodo desde otro se comprueba que se muestra correctamente. Brujería. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;¿Porqué?.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-1752448435910434597?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/1752448435910434597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/1752448435910434597'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/09/hboxvbox-en-customnode.html' title='HBox/VBox en CustomNode'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-8256442427576750567</id><published>2008-09-11T10:42:00.009+02:00</published><updated>2008-09-11T19:47:39.885+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>For/If. Sentencia y Expresión.</title><content type='html'>Ya venía utilizando la sentencia for para crear un array de nodos en JavaFX, había leído que for había substituido a foreach para recorrer los elementos de una secuencia, de esta forma:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;content&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;: &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;for&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; (&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;item&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;in&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; lista &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;where&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; item.id.length&gt;4) { &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;item&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Esto devuelve una secuencia de objetos cuyo id tenga mayor longitud de cuatro para la propiedad content de algún nodo. (Utiliza un modo parecido a sql con las secuencias). También se puede utilizar for como una sentencia como se hace de manera habitual en todos los lenguajes de programación:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;for&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; (n &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;in&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; [1..5]) {java.lang.System.out.println(n);}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;En algunas situaciones me he preguntado como utilizar una expresión del tipo x?y:z que se utiliza en otros lenguajes (unos cuantos) para asignar un valor aplicando una condición tipo if(x) {y} else {z}. Bien, buscando en Google se me dirige al señor &lt;a href="http://learnjavafx.typepad.com/weblog/2007/12/compiled-javafx.html"&gt;James &lt;/a&gt;&lt;a href="http://learnjavafx.typepad.com/weblog/2007/12/compiled-javafx.html"&gt;Weaver&lt;/a&gt;  y lo deja bien clarito. Tanto for como if se pueden utilizar en modo de sentencia o en modo expresión. Quiere esto decir que tienen la utilidad esperada de un lenguaje de programación y además nos sirven para asignar valores. En el caso de if podríamos utilizar:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;var&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; x:Number = &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;if&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; (a&lt;=3) 34 &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;else&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; 23;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Que asigna el valor 34 a x siempre que &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;a&lt;/span&gt; sea menor o igual que 3 y 23 en caso contrario. Siempre hay que poner entre paréntesis las condiciones del if. Esta simplificación del lenguaje seguramente tendrá detractores entre la gente sesuda pero sin duda es una simplificación sin pérdida de funcionalidad para el programador de RIA que requiere un lenguaje de script ágil. Cuando se utiliza if para asignación no se deben utilizar llaves.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-8256442427576750567?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/8256442427576750567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/8256442427576750567'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/09/forif-sentencia-y-expresin.html' title='For/If. Sentencia y Expresión.'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-2554678310818878717</id><published>2008-09-08T19:09:00.006+02:00</published><updated>2008-09-12T14:13:15.466+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>Diálogos y bloqueos de eventos</title><content type='html'>Estaba en implementar el modo en el que al abrir un nuevo frame se inhabilitara el frame que lo llama. Visto que no tenían lugar los métodos .setEnabled y otros propios de swing, me dispongo a implementar un modo satisfactorio. En JavaFX existe aunque no lo tenga en las herramientas del IDE NetBeans, una clase del paquete application que se llama Dialog y que es similar a la homónima en Swing. Sin embargo no contempla modos en los que se puede abrir la nueva ventana y siempre que se abre lo hace sin deshabilitar el frame que lo llama. Supongo que ésto tendrá que ver con que para los nodos jfx no existe la propiedad enabled, al menos no es accesible fácilmente. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Recordando cómo funcionaba la política en Flex de paso de eventos entre jerarquía de nodos y habiendo encontrado una propiedad que en principio parecía escondida, llamada blockMouse aplicable para todos los nodos, he podido hacer que un evento sobre un nodo visible no permita recibirlo al nodo que se situa por debajo. De este modo puedo cubrir mi frame padre con un manto semitrasparente con la propiedad de bloqueo puesta a true y así impedir que se pueda interactuar con el padre mientras el hijo esté funcionando.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-2554678310818878717?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/2554678310818878717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/2554678310818878717'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/09/dialogos-y-bloqueos-de-ratn.html' title='Diálogos y bloqueos de eventos'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-7885002545372877758</id><published>2008-09-04T09:46:00.012+02:00</published><updated>2008-09-05T10:47:34.801+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='Entregas'/><title type='text'>Segunda Entrega JavaFX. Clases y Objetos</title><content type='html'>&lt;h2&gt;&lt;span class="Apple-style-span"  style="font-family:Calibri;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal; font-size:16px;"&gt;Esta segunda entrega es cortita en extensión, habla del uso de clases y objetos en JavaFX y cómo se relacionan con clases Java. También menciona la particularidad de que las clases JavaFX pueden extender múltiples clases. Quiero dejar en este post también el enlace hacia lo que hasta ahora es la mejor compilación de documentación relativa al compilador y SDK preview de JavaFX. Se trata de un CHM que contiene tanto el API como la referencia más aceptada al lenguaje, así como algunos ejemplos y la documentación relativa al compilador de JavaFX. Se puede encontrar &lt;a href="http://geekycoder.wordpress.com/2008/08/03/chm-version-of-javafx-documentation/"&gt;en esta página de GeekyCoder&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;h3&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3&gt;&lt;a name="importing"&gt;&lt;/a&gt;&lt;span style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;font-family:&amp;quot;;"&gt;Importando Clases&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;font-family:&amp;quot;;"&gt;Las sentencias import se comportan de igual modo que en Java. La sintaxis es: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;pre&gt;&lt;span style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;font-family:&amp;quot;;"&gt;import &lt;em&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-bidi-Courier New&amp;quot;font-family:&amp;quot;;"&gt;PackageName&lt;/span&gt;&lt;/em&gt;.&lt;em&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-bidi-Courier New&amp;quot;font-family:&amp;quot;;"&gt;ClassName&lt;/span&gt;&lt;/em&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span lang="EN"  style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-ansi-language:ENfont-family:&amp;quot;;"&gt;import &lt;em&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-bidi-Courier New&amp;quot;font-family:&amp;quot;;"&gt;PackageName&lt;/span&gt;&lt;/em&gt;.*;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;  &lt;p&gt;&lt;span style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;font-family:&amp;quot;;"&gt;Si las sentencias import están presentes, deben aparecer antes que cualquier otro código de aplicación (no de la definición package). El lenguaje JavaFX define su propio espacio de trabajo para su librería de clases propias (packages javafx.*), pero las clases de Java también se pueden importar: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;pre&gt;&lt;span lang="EN"  style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-ansi-language: ENfont-family:&amp;quot;;"&gt;import javafx.application.*;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span lang="EN"  style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-ansi-language:ENfont-family:&amp;quot;;"&gt;import java.lang.System;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span lang="EN"  style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-ansi-language:ENfont-family:&amp;quot;;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;font-family:&amp;quot;;"&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;font-family:&amp;quot;;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;  &lt;h3&gt;&lt;a name="defining"&gt;&lt;/a&gt;&lt;span style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;font-family:&amp;quot;;"&gt;Definiendo Clases&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h3&gt;  &lt;p&gt;&lt;span style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;font-family:&amp;quot;;"&gt;La sintaxis para especificar una clase es la palabra class seguida del nombre de la clase, opcionalmente la palabra clave extends, y una lista separada por comas de las clases base, una llave abierta, una lista de atributos y funciones que acaban todos en punto y coma y una llave cerrada.&lt;/span&gt;&lt;span lang="EN"  style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-ansi-language:ENfont-family:&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;font-family:&amp;quot;;"&gt;JavaFX soporta &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;herencia múltiple&lt;/span&gt; y define alguna terminología y reglas nuevas: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;  &lt;li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      line-height:normal;mso-list:l0 level1 lfo1;tab-stops:list 36.0pt"&gt;Una      clase plana es cualquier clase que extiende directa o indirectamente una      clase escrita en Java.&lt;span lang="EN" style="mso-ansi-language:EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      line-height:normal;mso-list:l0 level1 lfo1;tab-stops:list 36.0pt"&gt;Una      clase de componente es cualquier clase que no es una clase plana.&lt;/li&gt;  &lt;li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      line-height:normal;mso-list:l0 level1 lfo1;tab-stops:list 36.0pt"&gt;Por      defecto, las clases escritas en JavaFX son clases de componente.&lt;span lang="EN" style="mso-ansi-language:EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      line-height:normal;mso-list:l0 level1 lfo1;tab-stops:list 36.0pt"&gt;Las      clases pueden extender, como máximo una clase plana. Si extiende una clase      plana, será una clase plana. Una clase puede también extender cualquier      número de clases componente o interfaces Java. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;font-family:&amp;quot;;"&gt;Nota:&lt;/span&gt;&lt;/strong&gt;&lt;span style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;font-family:&amp;quot;;"&gt; Una clase plana es realmente traducida a una clase Java, mientras que una clase componente es traducida a una clase Java y a una interfaz Java.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;font-family:&amp;quot;;"&gt;Es posible declarar una clase como pública, lo que significa que se puede acceder desde cualquier script. De otro modo, la clase sólo será accesible desde el contenedor del script (esta es la opción por defecto).&lt;/span&gt;&lt;span lang="EN"  style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-ansi-language:ENfont-family:&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;font-family:&amp;quot;;"&gt;JavaFX no soporta constructores, debes usar literales de objeto en su lugar. Para imitar el comportamiento de un constructor, define la función estática que devuelva un nuevo objeto e invoca esa función.&lt;/span&gt;&lt;span lang="EN"  style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-ansi-language:ENfont-family:&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a name="object"&gt;&lt;/a&gt;&lt;span lang="EN"  style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; mso-ansi-language:ENfont-family:&amp;quot;;"&gt;Definiendo Objetos&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h3&gt;  &lt;p&gt;&lt;span style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;font-family:&amp;quot;;"&gt;Como se describió en la anterior entrada, la forma preferible de instanciar una clase es con un objeto literal. Esta forma de emplazamiento de objeto usa una sintaxis declarativa que consiste en el nombre de la clase seguida de una lista delimitada con llaves de inicializadores de atributos. Cada inicializador consiste en el nombre del atributo seguido de una coma, seguida de una expresión que define su valor. Sin embargo, es también posible usar la palabra new cuando se crea un objeto: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;pre&gt;&lt;span lang="EN"  style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-ansi-language: ENfont-family:&amp;quot;;"&gt;import java.io.File;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span lang="EN"  style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-ansi-language:ENfont-family:&amp;quot;;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span lang="EN"  style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-ansi-language:ENfont-family:&amp;quot;;"&gt;var tmpPath = "/home/users/docs/tmp.txt"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span lang="EN"  style="Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-ansi-language:ENfont-family:&amp;quot;;"&gt;var myFile = new File("tmp.txt");&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;(&lt;span class="Apple-style-span" style="font-family: Georgia; font-size: 16px; white-space: normal; "&gt;&lt;a href="http://javafx.com/releases/preview1/docs/reference/JavaFX-Language.html"&gt;http://javafx.com/releases/preview1/docs/reference/JavaFX-Language.html&lt;/a&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-7885002545372877758?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/7885002545372877758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/7885002545372877758'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/09/segunda-entrega-javafx-clases-y-objetos.html' title='Segunda Entrega JavaFX. Clases y Objetos'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-5686950017460349596</id><published>2008-09-03T11:43:00.008+02:00</published><updated>2008-09-05T10:44:42.755+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='web service'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Clientes WebService con NetBeans 6.1</title><content type='html'>Leyendo el libro de descarga gratuita &lt;a href="http://www.theserverside.com/tt/books/wiley/masteringEJB/index.tss"&gt;Mastering EJB 3.0&lt;/a&gt; encuentro una referencia a la página &lt;a href="http://xmethods.net/"&gt;xmethods.net&lt;/a&gt; donde se puede encontrar una lista de servicios web de acceso gratuito y público. Posee una gran cantidad de servicios postales/geográficos enfocados en Norteamérica. Para probar como funciona un cliente de WebService es una fuente muy buena de referencia. Ofrece una descripción básica del servicio y la referencia al fichero wsdl (wiss-dull) con el que se construye el cliente. También he encontrado el sitio: &lt;a href="http://www.webservicex.net/"&gt;webservicex.net&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;La construcción del cliente con NetBeans 6.1 no  puede ser más sencilla. Si el tipo de proyecto lo soporta (de momento sólo he encontrado que el tipo de proyecto JavaFX no lo hace),  añadimos un WebClient al proyecto, le indicamos la URL del fichero wsdl y creará todos los artefactos locales para la comunicación con el servicio. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Una vez construidos los artefactos no tenemos más que arrastrar el método a la clase desde donde queramos hacer uso del método del servicio web para que cree un prototipo de acceso a este port. La gran mayoría de los ports que se ofrecen son tipos de datos compuestos, así que hay que añadir algún método para poder gestionar la información correctamente (.getCleanText por ejemplo para el servicio de Profanity).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;La información sobre cómo está diseñado el servicio web así como todos los métodos expuestos se puede ver en la especificación del wsdl. Bajo el apartado Web Services References se tienen todos los servicios web añadidos al proyecto. Podemos abrir cada wsdl en esta vista. Una vez abierto tenemos tres tipos de vista, source, wsdl y partner, donde se detallan los ports del servicio.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-5686950017460349596?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/5686950017460349596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/5686950017460349596'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/09/clientes-webservice-con-netbeans-61.html' title='Clientes WebService con NetBeans 6.1'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-4445909377985894131</id><published>2008-09-01T00:26:00.010+02:00</published><updated>2008-09-22T10:58:48.385+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>Funcionamiento de menú con JavaFX.</title><content type='html'>No seré yo el que ponga un pero al trabajo que realiza el personal en los códigos con JavaFX a los que se tienen acceso. Y más teniendo en cuenta que he sido testigo de la evolución y por tanto de las dificultades técnicas que ha sufrido esta tecnología. Pongo aquí cómo implemento un funcionamiento de menús sobre un par de arrays de nodos construidos como instancias de un nodo genérico de menú, algo más complejo que un CustomNode. (A ver cuándo puedo poner el visualizador de código tan útil en Blogger).&lt;br /&gt;&lt;br /&gt;La clase nodo contiene un rectángulo con relleno de color aleatorio, un texto y además una variable timeline para el efecto de "aparecer".&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;/*&lt;br /&gt; * una.fx&lt;br /&gt; *&lt;br /&gt; * Created on 22-sep-2008, 10:58:54&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;package com.megestiono.widgets;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * @author Alvaro&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;import javafx.scene.CustomNode;&lt;br /&gt;import javafx.scene.Group;&lt;br /&gt;import javafx.scene.Node;&lt;br /&gt;import javafx.scene.geometry.Rectangle;&lt;br /&gt;import javafx.scene.paint.Color;&lt;br /&gt;import javafx.scene.text.Text;&lt;br /&gt;import javafx.scene.Font;&lt;br /&gt;import javafx.scene.FontStyle;&lt;br /&gt;import javafx.animation.Timeline;&lt;br /&gt;import javafx.animation.KeyFrame;&lt;br /&gt;import javafx.animation.Interpolator;&lt;br /&gt;&lt;br /&gt;public class Nodo extends CustomNode {&lt;br /&gt;&lt;br /&gt;    public attribute texto:String="N/A";&lt;br /&gt;    attribute opa:Number=0;&lt;br /&gt;    public attribute t = Timeline {&lt;br /&gt;        repeatCount: 1&lt;br /&gt;        keyFrames : [&lt;br /&gt;            KeyFrame {&lt;br /&gt;                time : 1s&lt;br /&gt;                values : [&lt;br /&gt;                            opa =&gt; 1 tween Interpolator.LINEAR&lt;br /&gt;                ]&lt;br /&gt;            }&lt;br /&gt;        ]&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public function aparece():Void{&lt;br /&gt;        t.start();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public function create(): Node {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        var rnd = new java.util.Random();&lt;br /&gt;&lt;br /&gt;        return Group {&lt;br /&gt;            opacity: bind opa&lt;br /&gt;            content: [Rectangle {&lt;br /&gt;                    x: 0, y: 0&lt;br /&gt;                    width: 200, height: 200&lt;br /&gt;                    fill: Color.rgb(rnd.nextInt(255),rnd.nextInt(255),rnd.nextInt(255))&lt;br /&gt;&lt;br /&gt;                },Text {&lt;br /&gt;                    font: Font {&lt;br /&gt;                        size: 20&lt;br /&gt;                        style: FontStyle.PLAIN&lt;br /&gt;                    }&lt;br /&gt;                    x: 10, y: 40&lt;br /&gt;                    content: texto&lt;br /&gt;                }]&lt;br /&gt;        };&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Nodo {texto:"UnTexto"}&lt;br /&gt;&lt;br /&gt;//La ventana desde donde los gestiono con un menú rudimentario construido con rectángulos.&lt;br /&gt;&lt;br /&gt;import javafx.application.Frame;&lt;br /&gt;import javafx.application.Stage;&lt;br /&gt;import javafx.scene.layout.*;&lt;br /&gt;import javafx.scene.geometry.Rectangle;&lt;br /&gt;import javafx.scene.paint.Color;&lt;br /&gt;import javafx.scene.*;&lt;br /&gt;import javafx.application.WindowStyle;&lt;br /&gt;&lt;br /&gt;var secuencia1:String[] = ["Uno","Dos","Tres"];&lt;br /&gt;var secuencia2:String[] = ["Cuatro","Cinco","Seis"];&lt;br /&gt;var arraynodos1:Nodo[] = [Nodo{texto:secuencia1[0]},Nodo{texto:secuencia1[1]},Nodo{texto:secuencia1[2]}];&lt;br /&gt;var arraynodos2:Nodo[] = [Nodo{texto:secuencia2[0]},Nodo{texto:secuencia2[1]},Nodo{texto:secuencia2[2]}];&lt;br /&gt;var nodos:Nodo[] = arraynodos1;&lt;br /&gt;&lt;br /&gt;Frame {&lt;br /&gt;    title: "Menus"&lt;br /&gt;    width: 300&lt;br /&gt;    height: 300&lt;br /&gt;    closeAction: function() {&lt;br /&gt;        java.lang.System.exit( 0 );&lt;br /&gt;    }&lt;br /&gt;    visible: true&lt;br /&gt;    windowStyle: WindowStyle.TRANSPARENT&lt;br /&gt;&lt;br /&gt;    stage: Stage {&lt;br /&gt;        content: [VBox{&lt;br /&gt;                spacing:10&lt;br /&gt;                content:[HBox{&lt;br /&gt;                        spacing:10&lt;br /&gt;                        content:[Rectangle {&lt;br /&gt;                                x: 0, y: 0&lt;br /&gt;                                width: 50, height: 30&lt;br /&gt;                                fill: Color.FORESTGREEN&lt;br /&gt;                                onMousePressed: function (e){&lt;br /&gt;                                    for (nodo in nodos){&lt;br /&gt;                                        nodo.visible = false&lt;br /&gt;                                    }&lt;br /&gt;                                    nodos&lt;br /&gt;&lt;br /&gt;                                    [0].visible = true;&lt;br /&gt;                                        nodos&lt;br /&gt;                                    [0].t.start();&lt;br /&gt;                                }&lt;br /&gt;                            }, Rectangle {&lt;br /&gt;                                x: 0, y: 0&lt;br /&gt;                                width: 50, height: 30&lt;br /&gt;                                fill: Color.FORESTGREEN&lt;br /&gt;                                onMousePressed: function (e){&lt;br /&gt;                                    for (nodo in nodos){&lt;br /&gt;                                        nodo.visible = false&lt;br /&gt;                                    }&lt;br /&gt;                                    nodos&lt;br /&gt;&lt;br /&gt;                                    [1].visible = true;&lt;br /&gt;                                        nodos&lt;br /&gt;                                    [1].t.start();&lt;br /&gt;                                }&lt;br /&gt;                            }, Rectangle {&lt;br /&gt;                                x: 0, y: 0&lt;br /&gt;                                width: 50, height: 30&lt;br /&gt;                                fill: Color.FORESTGREEN&lt;br /&gt;                                onMousePressed: function (e){&lt;br /&gt;                                    for (nodo in nodos){&lt;br /&gt;                                        nodo.visible = false&lt;br /&gt;                                    }&lt;br /&gt;                                    nodos&lt;br /&gt;&lt;br /&gt;                                    [2].visible = true;&lt;br /&gt;                                        nodos&lt;br /&gt;                                    [2].t.start();&lt;br /&gt;                                }&lt;br /&gt;                            }, Rectangle {&lt;br /&gt;                                x: 0, y: 0&lt;br /&gt;                                width: 50, height: 30&lt;br /&gt;                                fill: Color.RED&lt;br /&gt;                                onMousePressed: function (e){&lt;br /&gt;&lt;br /&gt;                                    if (nodos == arraynodos2){&lt;br /&gt;                                        nodos = arraynodos1;&lt;br /&gt;                                        nodos&lt;br /&gt;&lt;br /&gt;                                        [0].visible = true;&lt;br /&gt;                                            nodos&lt;br /&gt;                                        [0].t.start();&lt;br /&gt;                                    } else {&lt;br /&gt;                                        nodos = arraynodos2;&lt;br /&gt;                                        nodos&lt;br /&gt;&lt;br /&gt;                                        [0].visible = true;&lt;br /&gt;                                            nodos&lt;br /&gt;                                        [0].t.start();&lt;br /&gt;                                    }&lt;br /&gt;                                }&lt;br /&gt;                            }]&lt;br /&gt;                    }&lt;br /&gt;,&lt;br /&gt;                    Group{&lt;br /&gt;                        content:bind nodos&lt;br /&gt;                    },&lt;br /&gt;                    Rectangle {&lt;br /&gt;                        x: 270, y: 20&lt;br /&gt;                        width: 50, height: 50&lt;br /&gt;                        fill: Color.BLACK&lt;br /&gt;                        onMouseClicked: function (e){&lt;br /&gt;                            java.lang.System.exit( 0 );&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                ]&lt;br /&gt;            }&lt;br /&gt;        ]&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-4445909377985894131?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/4445909377985894131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/4445909377985894131'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/09/funcionamiento-de-men-con-javafx.html' title='Funcionamiento de menú con JavaFX.'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-1444501695717175782</id><published>2008-08-14T08:39:00.023+02:00</published><updated>2008-09-05T10:47:46.494+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='Entregas'/><title type='text'>Primera Entrega JavaFX. Generalidades del Lenguaje</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Como comentaba anteriormente, tengo la intención de subir la referencia al lenguaje JavaFX que está disponible &lt;a href="http://javafx.com/releases/preview1/docs/reference/JavaFX-Language.html"&gt;aquí&lt;/a&gt; traducida al castellano. &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;Aunque este documento no define una especificación formal de lenguaje, se puede considerar una referencia completa de todas las funcionalidades actuales soportadas por el lenguaje. &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;Lo voy a hacer en varias entregas que coinciden con los capítulos del documento.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Esta primera entrada proporciona una vista general del lenguaje JavaFX Script. Describe sus funcionalidades principales, dejando los detalles para capítulos siguientes. Este documento está orientado a diseñadores y desarrolladores de aplicaciones ricas de cliente en Internet RIA, que funcionan en páginas web, como el software Java Web Start o como aplicaciones tradicionales de escritorio. Su contenido asume que el lector está familiarizado con el lenguaje Java. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;El lenguaje de programación JavaFX Script tiene las siguientes particularidades:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;    Usa sintaxis declarativa para especificar componentes GUI, habilitando al código del desarrollador acercarse al diseño real del GUI.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Usa enlazado de datos declarativos y evaluación incremental, permitiendo la creación y configuración sencilla de componentes individuales. Los datos de aplicación y los componentes GUI se sincronizan automáticamente.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Está tipado estáticamente, teniendo la mayor parte de estructuración de código, reuso y encapsulación que permiten la creación y mantenimiento de programas muy grandes en el lenguaje Java.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Funciona con la mayoría de IDES, incluyendo NetBeans.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Es capaz de soportar GUIs de cualquier tamaño y complejidad&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;"&gt;Es más sencillo de utilizar que Swing.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:verdana;"&gt;Las siguientes secciones presentan un recorrido rápido del lenguaje de programación JavaFX Script. Estas secciones proporcionan una introducción general de su sintaxis de núcleo y capacidades, comparando y contrastando con Java cuando sea apropiado. Cada punto se cubre luego con más detalle en capítulos subsecuentes.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-family:verdana;"&gt;Scripts&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;En el lenguaje JavaFX, un script es una o más declaraciones de expresiones. Evaluando el script se evalúan las declaraciones o expresiones en orden:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;var ten : Integer = 10;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;java.lang.System.out.println("Twice {ten} is {2 * ten}.");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Esto muestra:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Twice 10 is 20.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;A diferencia de una aplicación escrita en Java, un script no necesita contener ninguna definición de clase ni funciones.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;Clases&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Las definiciones de clases comparten muchas similitudes con Java, pero algunas diferencias son notables. El estado, por ejemplo, es información almacenada en atributos, no en campos. El comportamiento se expone a través de funciones y no métodos (más adelante se verá que ha desaparecido "operation" en la nueva versión del lenguaje, ahora se utiliza "function" tanto para métodos, no usando "return", como para funciones, con "return"). El siguiente ejemplo define una clase simple Rectangle que muestra la sintaxis básica de cada uno.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;class Rectangle {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;attribute width: Integer;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;attribute height: Integer;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;function grow(): Void {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;grow(1);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;function grow(amount: Integer): Void {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;width += amount;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;height += amount;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;El lenguaje de programación soporta herencia múltiple, haciendo posible que una clase herede de más de una clase.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-family:verdana;"&gt;Objetos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Objetct literals proporciona una sintaxis simple para instanciación de clase. El siguiente código crea una única instancia de la clase Rectangle definida previamente, inicializando sus atributos width y height a 100. (Nótese que no se necesita new)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Rectangle {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;width: 100&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;height: 100&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Para guardar una referencia a este objeto, usa la palabra var:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;var myRect = Rectangle {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;width: 100&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;height: 100&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:100%;"&gt;Expresiones y Operadores&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Como cualquier otro lenguaje de programación, el lenguaje JavaFX Script soporta expresiones y operadores.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;El capítulo 5 discute las expresiones y operadores disponibles en el lenguaje JavaFX Script.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;Secuencias&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Una secuencia guarda una lista ordenada de objetos. Esto es análogo grosso modo a los arrays de Java. Ambos guardan múltiples valores y son accedidos por un índice comenzando por 0.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;var week = ["Monday","Tuesday","Wednesday","Thursday",&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;"Friday","Saturday","Sunday"];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;var mon = week[0];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;var wed = week[2];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;var fri = week[4];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;También están soportadas las porciones (slice) de secuencias:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;var week = ["Monday","Tuesday","Wednesday","Thursday",&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;"Friday","Saturday","Sunday"];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;var weekdays = week[0..4]; // first slice&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;var weekend = week[5..6]; // second slice&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;Enlazado de Datos (bind)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;El enlazado de datos proporciona una sintaxis simple para sincronizar el estado de objetos múltiples. Cuando dos objetos están enlazados uno con el otro, el valor del segundo objeto cambia automáticamente cuando el primero se actualiza. Un uso común de enlazado de datos es guardar componentes GUI sincronizados con sus datos por debajo.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;import javafx.application.Frame;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;import javafx.application.Stage;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;import javafx.scene.text.Text;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;var myString = "Hello World!";&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Frame {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;width: 50&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;height: 50&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;visible: true&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;stage: Stage {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;content: Text {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;content: bind myString&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;// Si otra parte del código cambia myString&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;//el texto del GUI cambiará automáticamente&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;Disparadores (Triggers)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Los disparadores (triggers) son bloques de código que se ejecutan cuando se satisfacen ciertas condiciones. Por ejemplo, puede que quieras estar alertado de si el valor de un atributo ha sido establecido a algo que no es apropiado. El siguiente ejemplo muestra la sintaxis básica de un trigger:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;import java.lang.System;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;ReplaceDemo {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;mySensitiveData: "Will anyone notice?"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;class ReplaceDemo {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;attribute mySensitiveData: String&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;on replace {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;System.out.println("I noticed a change!");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;// application-specific safeguarding code would go here&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-1444501695717175782?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/1444501695717175782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/1444501695717175782'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/08/generalidades-del-lenguaje.html' title='Primera Entrega JavaFX. Generalidades del Lenguaje'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-5912257495597795065</id><published>2008-08-13T14:43:00.012+02:00</published><updated>2008-09-05T10:40:02.766+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>Dudas para el "Ask the Expert" del día 18</title><content type='html'>&lt;div&gt;Antes del "&lt;a href="http://java.sun.com/developer/community/askxprt/sessions/2008/jl0818.jsp"&gt;Ask an Exper&lt;/a&gt;t" que promocionó Sun el día 18 de Agosto para atender las cuestiones de los desarrolladores pioneros con JavaFX desde su página, me entretuve en apuntar algunas de las dudas que me iban surgiendo con el SDK Preview. No sólo tuve la oportunidad de remitirle estas preguntas sino algunas más que se me ocurrieron durante los cinco días que duró la recepción. Desafortunadamente ninguna de ellas fue respondida por los expertos. Así es que he decidido publicarlas y resolverlas yo mismo, al estilo de las entrevistas de &lt;a href="http://vdepanceta.blogspot.com/"&gt;VdePanceta&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Q: Proyecto Nile. El plugin de Illustrator presenta problemas, traduce float con ",". El traductor de svg tampoco funciona correctamente, no aparecen rellenos de color. &lt;div&gt;A: He conseguido traducir svg creados con NetBeans (bastante sencillos) a código .fx. Nada nuevo sobre los plugin de Ilustrator y Photoshop.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Q: Aplicación de efectos. Máscaras? InvertMask {input: &lt;span style="font-style: italic;"&gt;effect&lt;/span&gt;}. Desaparición de método clip de los elementos gráficos en el api del sdk preview. &lt;/div&gt;&lt;div&gt;A: Estoy seguro de que no estaba, pero ahora está en todos los objetos tipo nodo, ya puedo utilizar métodos clip de los nodos. El efecto InvertMask requiere un parámetro input para su aplicación, sería de esperar que se tratara de un objeto tipo nodo pero es un efecto.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Q: Plugin de NetBeans fácilmente bloqueable. Consumo de recursos indecente. Comportamiento del visor irregular. &lt;/div&gt;&lt;div&gt;A: No sólo eso sino que el resaltador de errores no funciona correctamente, algunas líneas se quedan marcadas como incorrectas cuando compila sin problemas.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Q: Recolector de objetos? Una solución para tener funcionabilidad de menú es cambiar el atributo visible del nodo en cuestión. Si la aplicación es compleja cada nodo será un elemento gráfico complejo o muy complejo. Si únicamente cambiamos el atributo visible, los objetos van a estar previamente cargados, ¿será esto un problema para el funcionamiento suave de la aplicación?. &lt;/div&gt;&lt;div&gt;A: Podemos utilizar bind para actualizar el array de nodos que se gestionan. Además, los objetos vivos se pueden gestionar con "do".&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Q: Renderizado html, webkit. Se carga con un componente swing (a través de componentview, antes no hacía falta llamarlo así) llamado label. ¿Cuáles son las expectativas de desarrollo de esta utilidad?, ¿es posible tener interactividad además de adentro hacia afuera además de afuera hacia adentro como tiene ahora?. ¿Cómo accedo a los argumentos de ejecución de un programa en JavaFX?. &lt;/div&gt;&lt;div&gt;A: Ninguna notcia sobre ello. De lo dicho por algunos miembros del equipo de desarrollo, JavaFX al igual que Swing tendrá un explorador html de andar por casa "street browser".&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-5912257495597795065?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/5912257495597795065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/5912257495597795065'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/08/dudas-para-el-ask-expert-del-da-18.html' title='Dudas para el &quot;Ask the Expert&quot; del día 18'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-5933716055271526899</id><published>2008-08-12T13:40:00.004+02:00</published><updated>2008-08-12T16:32:12.814+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>Scene Graph &amp; JWebPan</title><content type='html'>Acabo de leer la documentación que se dió en el JavaOne 2008 para una charla de JavaFX. Me ha salido como resultado de google a la búsqueda de FXNode. JavaFX tiene dos modos de aproximación a SceneGraph, SGNodes y FXNodes.&lt;br /&gt;&lt;br /&gt;Además en este documento se habla de JWebPane que permite la renderización de código HTML con CSS y JavaScript, algo de lo que ya sabíamos y de lo que no había vuelto a leer nada sobre ello para el preview sdk.&lt;br /&gt;&lt;br /&gt;Veo muchas más cosas interesantes sobre JavaFX en la página de &lt;a href="http://developers.sun.com/learning/javaoneonline/"&gt;JavaOne&lt;/a&gt;. Voy a estar entretenido un rato.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-5933716055271526899?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/5933716055271526899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/5933716055271526899'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/08/scene-graph-jwebpan.html' title='Scene Graph &amp; JWebPan'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-9150619057429412645</id><published>2008-08-12T11:52:00.005+02:00</published><updated>2008-08-12T12:50:47.259+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>Id de Nodo</title><content type='html'>A la pregunta de cómo puedo hacer que aparezcan un nodo específico cuando se pulsa un botón, al estilo de un funcionamiento de menú de botones típico, el blog de James Weaver resuelve con el &lt;a href="http://learnjavafx.typepad.com/weblog/2008/07/getting-decked.html"&gt;uso del id del nodo y de su atributo de visible&lt;/a&gt;. Siguiendo este método, cada botón modifica el valor (boolean) del atributo "visible" del nodo que se quiera ver. Dado que mi intención es concretar un método de uso del menú para la aplicación que estoy construyendo, tengo que comprobar que el recargo de elementos no sea una traba para el funcionamiento eficiente de la aplicación.&lt;br /&gt;&lt;br /&gt;Teniendo en cuenta que cuando se añade un grupo que contiene distintos nodos (que serán las pantallas que queramos ver), se van a superponer uno sobre otro, únicamente habrá que posicionar el grupo en la pantalla principal y gestionar el atributo de visibilidad de cada uno.&lt;br /&gt;&lt;br /&gt;Con la propiedad nodo se me ocurre tener alguna funcionalidad más. A la hora de crear los botones del menú, podría plantearme pasar únicamente el id como parámetro de creación y que sea el objeto botón el que se preocupe de construir sus recursos. Esto me obligaría a tener controlados los nombres de los ficheros de imágenes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-9150619057429412645?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/9150619057429412645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/9150619057429412645'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/08/id-de-nodo.html' title='Id de Nodo'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-1597983043285817118</id><published>2008-08-07T14:33:00.010+02:00</published><updated>2008-08-07T14:43:18.497+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>JavaFX SDK Preview</title><content type='html'>Desde que tengo instalado el plugin con el compilador propio del Preview SDK en NetBeans 6.1, la experiencia de desarrollo ha mejorado. Sigue habiendo momentos en los que deja de responder el IDE y en algunas ocasiones al ejecutar un fichero con Alt-F6 se carga una versión anterior creada con "Build Project". Por lo demás, las clases se ajustan al &lt;a href="http://javafx.com/releases/preview1/docs/api/index.html"&gt;API&lt;/a&gt; ya perfilado y al &lt;a href="http://www.blogger.com/%20http://javafx.com/releases/preview1/docs/reference/JavaFX-Language.html"&gt;manual&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;En breve, subiré los ejemplos con los que estoy trabajando. Construcción de botones con comportamientos, distribuciones de nodos para formar el diseño en pantalla, animaciones con máscaras. También aprovecharé para subir la documentación que he traducido y comentaré algunos cambios curiosos que ha tenido el lenguaje.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-1597983043285817118?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/1597983043285817118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/1597983043285817118'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/08/javafx-sdk-preview.html' title='JavaFX SDK Preview'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-2461461090861375834</id><published>2008-08-05T14:28:00.013+02:00</published><updated>2008-08-11T11:13:37.954+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>Esquemas de Diseño en Pantalla</title><content type='html'>Después de todos los cambios que en el API se han ido haciendo desde la creación de JavaFX Script creo se tiene una buena referencia en el &lt;a href="http://javafx.com/releases/preview1/docs/api/index.html"&gt;API&lt;/a&gt; publicado.&lt;br /&gt;&lt;br /&gt;Es aquí donde veo que existen dos clases llamadas VBox y HBox en el paquete javafx.scene.layout (VerticalBox y HorizontalBox, supongo) que se pueden usar para establecer la disposición de los nodos que se muestren en pantalla. He comprobado que efectivamente, son nodos los que toman estas clases como argumentos de su contenido y por ende todos los objetos de las clases que implemento como hijos de CustomNode son perfectamente añadibles. El funcionamiento de las dos clases parece idéntico excepto, claro está, que una dispone sus nodos de forma vertical y otra horizontal. Supongo que se podrán tomar cada una de ellas como nodos de su contenido de forma que se puedan arreglar disposiciones más complejas. He comprobado que efectivamente son anidables, con estas disposiciones se pueden acomodar distintos diseños en pantalla. Desconozco si ésta es la forma en la que se quiere que los desarrolladores hagan la distribución de objetos en pantalla o no.&lt;br /&gt;&lt;br /&gt;De acuerdo, podemos hacer diseños con menús de botones que diseñamos previamente. Podemos Interactuar entre objetos mostrados en pantalla. Mi pregunta es ahora, ¿cómo puedo cargar y descargar objetos de una zona en concreto?. Mi idea es poder definir una jerarquía de contenidos en los que los menús definen los objetos mostrados.&lt;br /&gt;&lt;br /&gt;Leyendo un manual de ActionScript 2 veo que tiene dos funciones con ciertas similitudes que se llaman HBox y VBox y que realizan una función muy similar. Da que sospechar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-2461461090861375834?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/2461461090861375834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/2461461090861375834'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/08/esquemas-de-diseo-en-pantalla.html' title='Esquemas de Diseño en Pantalla'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-8616962644231841229</id><published>2008-08-05T13:58:00.008+02:00</published><updated>2008-08-07T14:56:44.841+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>Perfilador de SceneGraph</title><content type='html'>Efectivamente, si sigo las indicaciones de la página:&lt;br /&gt;&lt;br /&gt;http://www.nobel-joergensen.com/roller/java/entry/profiling_javafx_rendering&lt;br /&gt;&lt;br /&gt;veo que la aplicación que nos propone funciona mucho mejor. ¿Pero y el resto de las aplicaciones que ya tengamos funcionando? ¿puede ser esta la causa de que no tenga buen comportamiento mi botón negro?&lt;br /&gt;&lt;br /&gt;¿Qué es SceneGraph?, ¿qué tiene que ver con todo ésto?. Esta tecnología se ha incorporado al API de JavaFX recientemente. SceneGraph no sólo se utiliza con JavaFX, también se utiliza con Swing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-8616962644231841229?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/8616962644231841229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/8616962644231841229'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/08/perfilador-de-scenegraph.html' title='Perfilador de SceneGraph'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-8611626676465712325</id><published>2008-08-05T13:55:00.007+02:00</published><updated>2008-08-11T12:08:10.447+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>Anodino</title><content type='html'>¿Porqué el visor que ofrece NetBeans 6.1 en el plugin de JavaFx no siempre es fiel a lo que se ofrece cuando se ejecuta?&lt;br /&gt;Creo que ya tengo resuelta esa duda. Cuando se llaman a clases desde un frame, se accede a la última clase compilada. Aunque el visor de dentro de NetBeans muestre la clase ya compilada, no es ésa la que está en el paquete que después es llamada. Hay que refrescar las clases disponibles (F11).&lt;br /&gt;- Ejemplo de botón negro, el triángulo&lt;br /&gt;- Ejemplo de BlurMotion&lt;br /&gt;- Tengo una distribución de botones que no actualizan lo mostrado al código que ... Hay algunas clases que no refrescan su clase compilada después de construir el proyecto.&lt;br /&gt;&lt;br /&gt;- La url que tiene como argumento la clase image debe tener especificar el protocolo en su ruta. De esto me he dado cuenta cuando he visto que las urls externas "http://..." funcionaban sin mayor problema pero ha sido cuando he especificado una ruta como esta: "file:///c:/Documents%20and%20Settings/alvaro.EUROPA-SYSTEM/Mis%20documentos/NetBeansProjects/JFXSandBox/img/mensajes.png" cuando por fin ha podido leer el fichero en la máquina local. No sólo se trata del "file:///" al principio sino que no admite espacios en medio tampoco.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-8611626676465712325?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/8611626676465712325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/8611626676465712325'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/08/anodino.html' title='Anodino'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-3209637131346396225</id><published>2008-08-05T11:52:00.013+02:00</published><updated>2008-08-29T09:20:51.622+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>Anodino y Edificante JFX</title><content type='html'>Para ver el uso que tiene Timeline para hacer &lt;span style="font-weight: bold;"&gt;animaciones&lt;/span&gt; en la versión compilada de JavaFX (ya se ha dejado de utilizar dur) miro el ejemplo que aparece en una &lt;a href="http://jfx.wikia.com/wiki/Animation"&gt;entrada del Wiki de JavaFX&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;De este código, una vez visto correr, se pueden inferir reglas interesantes. El código del script es el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import javafx.ext.swing.*;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import javafx.scene.geometry.*;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import javafx.scene.paint.*;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import javafx.animation.*;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import java.lang.System;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var x = 0;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var t = Timeline {     // Utilizo Timeline como un objeto al que le aplicaré&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   repeatCount: 3     // los métodos start() y stop(). Interesante atributos&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   autoReverse: true  // repeatCount y autoReverse&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                      // Únicamente modifico el valor de x que es accesible&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                      // dentro del script. Es a este valor al que se hace&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                      // referencia con un bind del atributo animable&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                      // La estructura general de Timeline es metódica&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   keyFrames: [KeyFrame{time  : 0s&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                        values: x =&gt; 0},&lt;/span&gt;&lt;br /&gt;                  &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;               KeyFrame{time  : 2s&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                        values: x =&gt; 400 tween Interpolator.LINEAR}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  ]//keyFrames&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}//Timeline;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SwingFrame {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   closeAction: function(): Void {System.exit(0);}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   title      : 'Animation: Simple'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   background : Color.WHITE;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   width      : 550  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   visible    : true&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   content: BorderPanel{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       top: Canvas {content:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;           Rectangle {x     : bind x&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                      y     : 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                      width : 100&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                      height: 100&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                      fill  : Color.BLUE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;           }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       }//Canvas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       bottom: FlowPanel{content: [     // La versión de compilación de la que&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                                        // dispongo no utiliza SwingButton sino&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                                        // Button (igualmente tiene atributo action)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;           Button{text  : "Start"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                       action: function(): Void{t.start();}},&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;           Button{text  : "Pause"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                       action: function(): Void{t.pause();}},&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;           Button{text  : "Resume"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                       action: function(): Void{t.resume();}},&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;           Button{text  : "Stop"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                       action: function(): Void{t.stop();}}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       ]}//FlowPanel    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   }//BorderPanel&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}//SwingFrame&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La animación siempre hace uso de la función especial (de JavaFX, también la he visto en Swing) &lt;span style="font-weight: bold;"&gt;bind&lt;/span&gt;. Esta tiene la propiedad de actualizar automáticamente el valor del atributo al que se le asocia cuando cambia el valor de una variable y es ésta variable primera la que cambia con el tiempo con el objeto Timeline.&lt;br /&gt;&lt;br /&gt;El tema con el sizeof me mola.&lt;br /&gt;&lt;br /&gt;JavaFX permite hacer comparaciones de cadenas con el operador lógico "==" que se utiliza para comprobar igualdad entre cualquier tipo de variables. Esto es una diferencia con el lenguaje Java que necesita del método .equals().&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-3209637131346396225?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/3209637131346396225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/3209637131346396225'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/08/anodino-y-edificante-jfx.html' title='Anodino y Edificante JFX'/><author><name>Alvaro Azpeitia</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-6299238383962670760</id><published>2008-08-05T10:50:00.005+02:00</published><updated>2008-08-05T13:37:36.643+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><title type='text'>JavaFX</title><content type='html'>Un día me dicen: "La aplicación se tiene que hacer con JavaFX". ¿Qué es JavaFX?, ¿cómo se utiliza?, ¿para qué sirve?, ¿qué posibilidades tiene?, ¿es una plataforma estable de desarrollo?, ¿qué futuro tiene?, ¿cómo es de fiable?, ¿cuál es la mejor herramienta para utilizarlo?. La información que iba leyendo sobre JavaFX más que resolver dudas me platean muchas más.&lt;br /&gt;&lt;br /&gt;Será en este blog donde recoja las conclusiones, observaciones e impresiones sobre mi toma de contacto con esta tecnología.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-6299238383962670760?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/6299238383962670760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/6299238383962670760'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2008/08/javafx.html' title='JavaFX'/><author><name>dextroso</name><uri>http://www.blogger.com/profile/06368773287016751909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-112802765011411330</id><published>2005-09-29T22:47:00.000+02:00</published><updated>2005-09-30T06:21:05.323+02:00</updated><title type='text'>Portátiles en las escuelas. Ole aín, Negroponte.</title><content type='html'>Estupenda noticia que llega desde  &lt;a href="http://linux.slashdot.org/article.pl?sid=05/09/29/129235&amp;from=rss"&gt;SlashDot.&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;Se trata de un ordenador portátil para la educación en países en desarrollo que se venderá por 100$ a los gobiernos y estos los distribuirán gratuitamente a los alumnos de primaria y secundaria. &lt;/span&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;Me parece una idea francamente (como dirían los de Gomaespuma). Además del precio, destaca su conectividad, su monitor, la posibilidad de usarlo como tablet pc, su reconocimiento de escritura, la posibilidad de autogenerar la energía que necesite y como no, la posible extensión al mercado con un precio muy competitivo. Hay imágenes del proyecto &lt;a href="http://beta.news.com.com/Images+MITs+100+laptop/2300-1044_3-5884639.html?tag=nefd.lede"&gt;aquí.&lt;/a&gt;&lt;/span&gt;&lt;a href="http://beta.news.com.com/Images+MITs+100+laptop/2300-1044_3-5884639.html?tag=nefd.lede"&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;Esto sí que es una aplicación útil de la tecnología y no tanto aparatito de nave espacial.&lt;/span&gt;En &lt;a href="http://beta.news.com.com/The+100+laptop+moves+closer+to+reality/2100-1044_3-5884683.html"&gt;news.com&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;leo el estracto de la presentación del proyecto que realizó &lt;span style="font-weight: bold;"&gt;Nicolás Negropont&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;e&lt;/span&gt; sobre el que he hecho mis pinitos de traducción:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;ul&gt;   &lt;li&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;Nicolas Negroponte, el cofundador de MediaLab en el Instituto de Tecnología de Massachusetts (MIT), detalló las especificaciones del ordenador portátil de 100$ para niños en países en desarrollo.&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;Negroponte, quien sugirió su propósito original en el Foro Económico Mundial en Davos, Suiza, en Enero, ha dicho que su grupo sin ánimo de lucro mantiene negociaciones con cinco países: Brasil, China, Thailandia, Egipto y Sudáfrica, para proveer hasta 15 millones de dispositivos de testeo para niños. También afirma que las autoridades de Massachusetts están trabajando con el MIT para la distribución de los portátiles en las escuelas primarias.&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;"Esta es la cosa más importante que he hecho nunca en mi vida", dijo en Miércoles en la presentación en la Conferencia sobre tecnologías emergentes y revisión tecnológica que se celebró en el MIT. "La respuesta ha sido increíble. La idea es simple. Es un proyecto educativo, no un proyecto de portátil. Si podemos mejorar la educación, en particular las escuelas primarias y secundarias, este será un mundo mejor.&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;Uno de los objetivos del proyecto es hacer que la idea de pc de bajo coste sea una idea que se propague, como el sistema operativo Linux o la enciclopedia libre Wikpedia. "Esto es una educación de fuente abierta (en oposición a propuestas comerciales). Es una gran cuestión".&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;Negroponte aclara que la idea es que los gobiernos pagarán completamente los portátiles por 100$ y lo distribuirán gratuitamente a los estudiantes.&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;El diseño propuesto para las máquinas contiene un procesador de 500MHz, una memoria RAM de 1GB y un innovador monitor de doble modo de funcionamiento que puede ser utilizado a todo color o en blanco y negro para contrastar mejor a la luz solar. Esta forma dual de pantalla hace del dispositivo tanto un ordenador portátil como un e-book (libro electrónico).&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;Uno de los diseños considerados es un monitor plano y flexible para reconocer escritura sobre él desarrollado en el Media Lab del MIT. Negroponte afirma que esta teconología puede ser usada para producir monitores de 10 céntimos por pulgada cuadrada. "Lo que se intenta es un monitor de 12 pulgadas por 12$ con consumo próximo a cero".&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;La alimentación eléctrica de los nuevos sistemas vendrán tanto de la corriente eléctrica convencional o baterías como de una manivela adosada a un lado del aparato para tener en cuenta que los países a los que se propone este proyecto no tienen energía eléctrica en zonas remotas.&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;Las máquinas correrán un sistema operativo Linux y también incorporará aplicaciones desarroladas por el MIT y software específico del país que lo utilice. "El software se ha hecho demasiado pesado (refiriéndose al tamaño en disco) y poco fiable, así que empezamos con Linux".&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;En la cuestión de conectividad, las máquinas tendrán Wi-Fi conexión para teléfono móvil e incluirán puertos USB. También tendrán integradas un "red de maya", un concepto peer-to-peer para compartir una única conexión a internet para varias máquinas.&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;"En los países en vías de desarrollo, la cuestión no es la conectividad", ha dicho Negroponte. "Esa era la cuestión, pero hay mucha gente trabajando en ello, gracias a la competitividad global. Pero para la educación, el escollo es el portátil".&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;Hay cinco compañías trabajando con el MIT para producir inicialmente de 5 a 15 millones de unidades de test en este año: Google, Advanced Micro Devices, News Corp., Red Hat y BrightStar. El proyecto en curso es producir de 100 a 150 millones de unidades hasta 2007.&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;Negroponte admite que su propósito es ambicioso. Actualmente, la producción de portátiles en el mundo está por debajo de 50 millones.&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt; &lt;ul&gt;   &lt;li&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;Aunque la propuesta inicial es trabajar con gobiernos, el MIT considera autorizar el diseño o darlo a otras compañías para hacer versiones comerciales del PC. "Estos podrían ser adquiridos por 200$ y de éstos 20$ o 30$ serían retribuídos al MIT para hacer los portátiles de los niños. Seguimos trabajando en ello".&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt; &lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-112802765011411330?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/112802765011411330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/112802765011411330'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2005/09/porttiles-en-las-escuelas-ole.html' title='Portátiles en las escuelas. Ole aín, Negroponte.'/><author><name>dextroso</name><uri>http://www.blogger.com/profile/06368773287016751909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-112631943975031086</id><published>2005-09-10T04:25:00.000+02:00</published><updated>2005-09-10T05:05:29.956+02:00</updated><title type='text'>Glade y libglade</title><content type='html'>Continúo mi exploración de Linux, a mi paso, con tranquilidad que no se puede ir deprisa para comenzar. He encontrado un buen manual y referencias para el desarrollo de aplicaciones con &lt;span style="font-style: italic;"&gt;Glade&lt;/span&gt;, en inglés, eso si. En&lt;br /&gt;&lt;a href="http://www.kplug.org/glade_tutorial/glade2_tutorial/glade2_introduction.html"&gt;Graphical Interface Devplopment with Glade2&lt;/a&gt;&lt;br /&gt;se puede encontrar una introducción a Glade como diseñador de interfaces, detallado y conciso. Igualmente interesantes son los links que aparecen en el penúltimo apartado del documento (summary and resoruces), donde se nos redirige a completos manuales de GTK+, GDK, GLib, GNOME (donde podremos encontrar las normas de diseño que sugiere esta plataforma) y LibGlade (que me aparece roto el link y no podré evaluar de momento). He encontrado un link tambien de developer.gnome.org para el manual de &lt;a href="http://developer.gnome.org/doc/API/libglade/libglade.html"&gt;libglade&lt;/a&gt;.&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;Un link para ser descargado para poder tenerlo como referencia en cualquier momento para los que queremos empezara a programar para GNOME.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-112631943975031086?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/112631943975031086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/112631943975031086'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2005/09/glade-y-libglade.html' title='Glade y libglade'/><author><name>dextroso</name><uri>http://www.blogger.com/profile/06368773287016751909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-16389721.post-112596967118020457</id><published>2005-09-06T03:15:00.000+02:00</published><updated>2005-09-06T03:29:58.113+02:00</updated><title type='text'>Sobre blog y rss.</title><content type='html'>&lt;div style="text-align: left;"&gt;Hace menos de una semana que he descubierto lo que se puede hacer y leer teniendo un lector de noticias para formato rss. Me parece un modo estupendo de estar al tanto de lo que mas le pueda interesar a cada uno y estoy dando buena cuenta de ello.&lt;br /&gt;Acerca de editar mi propio blog, me parece una buena idea en tanto en cuanto me sirve para escribir sobre lo que me interesa, lo que ocurre a mi alrededor y eso nunca me ha sido inútil. Es más, me parece que es una costumbre muy saludable.&lt;br /&gt;También quisiera publicar aquí todas las noticias y sitios interesantes que encuentre sobre mis temas, electrónica, física, informática y todo lo que me parezca curioso.&lt;br /&gt;Espero poder reeditar esta entrada en un futuro. Efectivamente, se puede editar.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16389721-112596967118020457?l=miraquetediga.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/112596967118020457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16389721/posts/default/112596967118020457'/><link rel='alternate' type='text/html' href='http://miraquetediga.blogspot.com/2005/09/sobre-blog-y-rss.html' title='Sobre blog y rss.'/><author><name>dextroso</name><uri>http://www.blogger.com/profile/06368773287016751909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
